建立一个长连接,如果服务端关闭,那么客户端如何知道该连接不可用?
查找到判断socket长连接是否有效的办法是socket.sendUrgentData,如果不抛出异常就是有效;
可是测试发现在window下是可以捕获到异常的;但是在linux下无法捕获异常;
后来发现连续发两次socket.sendUrgentData,如果第二次与第一次间隔时间稍长的话,第二次异常可以捕获,可是这样就影响效率了?谁有更好的办法?
下面是测试代码:
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ip, port));
LOG.info("--wait--");
LOG.info("--do--");
socket.sendUrgentData(0xff);
socket.sendUrgentData(0xff);
socket.close();
LOG.info("--over--");
查找到判断socket长连接是否有效的办法是socket.sendUrgentData,如果不抛出异常就是有效;
可是测试发现在window下是可以捕获到异常的;但是在linux下无法捕获异常;
后来发现连续发两次socket.sendUrgentData,如果第二次与第一次间隔时间稍长的话,第二次异常可以捕获,可是这样就影响效率了?谁有更好的办法?
下面是测试代码:
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ip, port));
LOG.info("--wait--");
LOG.info("--do--");
socket.sendUrgentData(0xff);
socket.sendUrgentData(0xff);
socket.close();
LOG.info("--over--");
解决方案 »
- SQL语句在程序中得到的结果和在可视化的mysql工具查询的结果不同,为什么???
- HTTP/1.1 302 Moved Temporarily
- spring mvc 关于在controller中获取request
- 求解语法的含义
- webwork特别菜的问题 (在线等)
- java.lang.OutOfMemoryError: Java heap space
- (求助)在JBuilder 2006无发启动JSF写的程序。。(在线等)
- 请推荐一些学习J2EE的好书
- tomcat一天死了差不多十次?真是郁闷啊?数据量大概也就十万,用的人也就20-30人吧
- 有谁知道哪有struts的电子文档啊(中文)
- OSGI 怎么添加额外的jar包
- 把网站设置桌面快捷方式
第一,不管服务器还是客户端断开连接,另一端必定会收到socket连接断开的异常
第二,在socket发送数据前,可以检查 socket.isConnected() 来判断连接是否存在
第三,假设服务器没有开启,connect动作就不应该会执行下去,直接就抛错了
LZ要的是判断连接状态,应该是isConnected() 和 isClosed()吧