Pet*_*ell 9 java sockets ip multithreading tcp
我正在开发一个服务器,通过TCP/IP托管第三方设备,并且遇到突然的连接丢失(设备通过蜂窝连接).我需要找到一种方法来检测断开连接,而无需将数据写入设备本身.
我已经看过使用TCP keepalive功能,但Java似乎不允许任何调整keepalive操作的时间.
这样做有什么建议的方法吗?
我的简化套接字代码如下:
public class Test2Socket {
public static void main(String[] args) {
try {
ServerSocket skt = new ServerSocket(1111);
Socket clientSocket = skt.accept();
clientSocket.setKeepAlive(true);
System.out.println("Connected..");
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while((inputLine = input.readLine()) != null)
{
System.out.println(inputLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何反馈将不胜感激.
您将无法完成TCP堆栈的内置保持活动.这是因为应用程序无法调整保持活动间隔,它由操作系统设置,默认值相当高(小时).这不是Java特有的.
如果你需要在合理的时间内超时,你必须在要使用的协议中实现某种保持活力.我见过的大多数高级协议都有某种NOP功能,你发送"你在吗?" 消息,另一方发送"是的,我在这里"回复,而不做任何其他事情.
| 归档时间: |
|
| 查看次数: |
21154 次 |
| 最近记录: |