做了个服务器后台,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楼 正解
------解决方案--------------------
要长连接 ,得用心跳机制,每个多久要激活这个链接