日期:2014-05-18  浏览次数:20623 次

java ServerSocket断开连接问题
本帖最后由 aulindoncool 于 2014-04-03 18:24:16 编辑
做了个服务器后台,ServerSocket部分的代码如下所示:

try{  
ServerSocket srvSocket=new ServerSocket(“7013”);
ThreadPoolTaskExecutor  pe=null;
while(true){
Socket socket=srvSocket.accept();
socket.setKeepAlive(true);  //这个keepAlive是为了检测已经死掉的socket(检测周期大概2小时)
ServerHandler serverHandler=new ServerHandler(socket);
if(pe!=null){
pe.execute(serverHandler);
}else{
pe = (ThreadPoolTaskExecutor)POSPComponentFactory.getComponent("taskExecutor");
pe.execute(serverHandler);
}
}
}catch(Exception e){  
e.printStackTrace();
}  finally{
close();
}


其中pe.execute(serverHandler)方法会调用一个线程来处理终端上来的TCP/IP连接,该线程里面有个while循环读取终端发送过来的数据(是个长连接)。
终端通过TCP/IP连接到该ServerSocket,连接之后发送数据是正常的,经过大概半小时或更长时间的空闲后,若终端再次发送数据,则后台无法收到该数据(用wireshark工具抓包也抓不到相关TCP/IP数据包)。
这是为什么呢?有没有同学碰到过类似问题啊? 求指教!
------解决方案--------------------
socket会超时的啊
------解决方案--------------------
设置下settimeout
------解决方案--------------------
            2楼        正解
------解决方案--------------------
要长连接 ,得用心跳机制,每个多久要激活这个链接