为了账号安全,请及时绑定邮箱和手机立即绑定

老师的源代码启动之后一旦刷新网页,或者关闭网页,就会抛异常,请问如何解决它?

源代码虽然可以正常使用,发消息也没问题。但是启动网页后,一刷新网页或者关闭网页,就会抛异常:

*******************************************************************************************************************

目前我们不支持二进制消息

java.lang.RuntimeException: 【com.imooc.netty.websocket.MyWebSocketHandler】不支持消息

客户端与服务端连接关闭...

at com.imooc.netty.websocket.MyWebSocketHandler.handWebsocketFrame(MyWebSocketHandler.java:104)

at com.imooc.netty.websocket.MyWebSocketHandler.messageReceived(MyWebSocketHandler.java:80)

at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103)

at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:74)

at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:138)

at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:320)

at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:154)

at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:74)

at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:138)

at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:320)

at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)

at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:127)

at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:485)

at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:452)

at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:346)

at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:794)

at java.lang.Thread.run(Thread.java:745)

客户端与服务端连接开启...

****************************************************************************************************************************

请问一下异常的原因,以及如何解决异常。


正在回答

5 回答

刚刚突然间发现,在判断是否为CloseWebSocketFrame的时候,如果是CloseWebSocketFrame并没有return,也就是程序将会继续往下运行,然后又判断如果不是TextWebSocketFrame自然就抛异常,所以正解应该是在判断CloseWebSocketFrame时,如果是,加上return即可。

0 回复 有任何疑惑可以回复我~

这个地方判断二进制消息的方法是 如果不是 CloseWebSocketFrame PingWebSocketFrame 和 TextWebSocketFrame 就是 二进制消息,所以我猜测应该服务器刷新之类的操作会发送这么一个消息吧?

0 回复 有任何疑惑可以回复我~
我肯定知道老师写了抛异常的语句,所以才抛异常。但是不支持二进制是啥意思?
0 回复 有任何疑惑可以回复我~

我尝试着把代码修改为这样,然后就不报错了。但是。。。why??

//判断是否是二进制消息
if (!(frame instanceof TextWebSocketFrame)) {
    System.out.println("目前我们不支持二进制消息");
    ctx.channel().write(new PongWebSocketFrame(frame.content().retain()));
    return;
}

0 回复 有任何疑惑可以回复我~
#1

tqz啊 提问者

刷新和关闭时客户端向服务端发送了什么呢?
2018-09-17 回复 有任何疑惑可以回复我~
还有为什么说不支持二进制?
0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师的源代码启动之后一旦刷新网页,或者关闭网页,就会抛异常,请问如何解决它?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信