发布于2021-06-08 11:37 阅读(1097) 评论(0) 点赞(25) 收藏(2)
在搞遥控功能时候,发现一个奇怪的问题,socket的服务端传指令到客户端,我用了一个status来判断是否传送成功:
点击开始遥控,客户端收到start_manual_mode指令
页面返回的也是true,说明成功发送
此时关闭客户端,并且点击前进指令
发现仍然是true,发送成功,
再次点击前进指令,发现这次就是false了;
按道理说,客户端关闭,再点击指令,应该马上就变为false,而不是第二次才变,这里我用debug走了好几次,发现第一次都是正常走流程,第二次被trycatch捕获异常,我自己猜测是客户端关闭,输入输出流还有效,可以正常发送(但是客户端已关闭),第二次则会捕获socket关闭异常,
在客户端发送消息的时候,可以判断socket是否有效:
try {
socket.sendUrgentData(0);
} catch (IOException e) {
//如果抛出了异常,那么就是断开连接了
return false;
}
把上面代码加在服务端发送方法里,每次发送消息,就会判断socket是否有效
这样,只要客户端一关闭,发送消息,就会捕获到异常,不会存在之前延迟一步的情况
作者:小胖子爱java
链接:http://www.javaheidong.com/blog/article/219514/9b8dd217eb8549d3c4c8/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!