程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-05(1)

java的tcp服务器-socket判断客户端是否断开连接

发布于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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

25 0
收藏该文
已收藏

评论内容:(最多支持255个字符)