socket服务器端如何判断客户端是否关闭连接 我用nio做了一个服务器端 在客户端关闭了socket后 服务器端报出异常 java.io.IOException: 您的主机中的软件放弃了一个已建立的连接。 while (socket.socket().isConnected()) 这是我用的循环,为什么我关闭了客户端后这里依然判断是连接的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 while ((i = acceptKey.selector().select()) > 0) 这里把客户端关闭后为什么select的直还是1啊。。 还需要加一个条件额while (socket.socket().isConnected()&&!socket.socket().isClosed)这样就好了第一个条件叫 曾经连接过 第二个条件 已经连到那个什么东西并且没有关闭 true; otherwise, false 推荐LZ一个nio的框架实现MINA它对一些较底层的操作都做了封装你可以把注意力都用在业务处理上了我也只是初涉网上资料挺多而且它对部分常用的协议也做了封装如http等 isConnectioned()是判断不了的,你可以在read()那的捕捉异常,抛出异常时就可以判断是超时还是断开;你也可以这样啊:while(status && socket != null){ try{ socket.sendUrgentData(0xFF); socket_sign = true ; ghp.setPpConnect(true); //连接情况 Thread.sleep(5000); }catch(Exception e1){ System.out.println("Pumper Server Interruped...!"); status = false; socket_sign = false; ghp.setPpConnect(false);} 我在把客户端关闭了以后 服务器这边调用socket。isclosed 还是false。 通过read()捕捉IOException,个人感觉不是很好,因为这是一个阻塞的方法,它放出IOException是因为 read()在某一次读取数据==-1,客户端离开并未发送数据,所以服务器端接收的数据长度只会一直是0,所以客户端离开并不是触发IOException的真正原因.个人建议在socket.getInputstream()或者是socket.getOutputStream()出捕捉IOException,这样客户端离开就会抛出真正的异常了.不过通过抛出异常中断程序实在不是一种非常好的办法,具体建议去读读<<编程匠艺>>,绝对有意想不到的提高. 可是我的异常就是在read处出现的啊,因为客户端连接被关闭的原因,这样的话socket.getInputstream()也会出现异常吗 socket.getInputStream()报的异常就是connect Exception,你在socket.getInputStream() try/catch,然后断开客户,就是上面的异常. Java毕业设计—客房管理系统 求数据结构解惑 一个基础问题 java字符长度问题 关于Object数组的问题 java判断目录是否存在用什么函数... 请求推荐五子连珠的Java代码 关于报表模版求教 why my IE can not show the applet? 请问各位兄台,java与j++6.0有哪些不同? jxl读取满足条件的单元格,并返回单元格的位置 如何获得swing组件的上一级组件
这里把客户端关闭后为什么select的直还是1啊。。
第二个条件 已经连到那个什么东西并且没有关闭 true; otherwise, false
MINA
它对一些较底层的操作都做了封装
你可以把注意力都用在业务处理上了
我也只是初涉
网上资料挺多
而且它对部分常用的协议也做了封装如http等
你也可以这样啊:
while(status && socket != null){
try{
socket.sendUrgentData(0xFF);
socket_sign = true ;
ghp.setPpConnect(true); //连接情况
Thread.sleep(5000);
}catch(Exception e1){
System.out.println("Pumper Server Interruped...!");
status = false;
socket_sign = false;
ghp.setPpConnect(false);
}
并未发送数据,所以服务器端接收的数据长度只会一直是0,所以客户端离开并不是触发IOException的真正原因.个人建议在socket.getInputstream()或者是
socket.getOutputStream()出捕捉IOException,这样客户端离开就会抛出真正的异常了.不过通过抛出异常中断程序实在不是一种非常好的办法,具体建议去读读<<编程匠艺>>,绝对有意想不到的提高.
可是我的异常就是在read处出现的啊,因为客户端连接被关闭的原因,这样的话socket.getInputstream()也会出现异常吗