亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

老師的源代碼啟動之后一旦刷新網頁,或者關閉網頁,就會拋異常,請問如何解決它?

源代碼雖然可以正常使用,發消息也沒問題。但是啟動網頁后,一刷新網頁或者關閉網頁,就會拋異常:

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

目前我們不支持二進制消息

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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號