我有一个名为“clientSock”的套接字。它已连接并正在工作。使用套接字手动发送Keep-Alive包
我收到使用一个线程循环的数据,如下所示:
char[] inputChars = new char[1024];
int charsRead = 0;
while (!stopNow) {
try {
if ((charsRead = inputStream.read(inputChars)) != -1)
{
System.out.println("Firing");
fire_dataRecieved(new String(inputChars, 0, charsRead)); //Fire event.
}
} catch (IOException e) {
//CLIENT HAS DISCONNECTED...
connectedClient.disconnect();
stopNow();
}
}
我想发送的“保持活动包”,只需发送“#保活”到另一端。
我可以使用sendStream.print("#KEEP-ALIVE")
来做到这一点。有没有更好的方法来做到这一点?如果没有,是否有一种有效的方法来检查你是否得到了数据包?或者已经有的东西可以让你检查另一端是否还活着? clientSock.setKeepAlive(true)
不会为我剪下它。我需要检查另一端是否按需提供。
一个选项是在客户端套接字上设置读取超时(http://download.oracle.com/javase/6/docs/api/java/net/Socket.html#setSoTimeout%28int%29) 。你使用'linux'是否是 – mre 2011-06-13 12:00:23
?在Linux中,默认保持活动时间是** 2小时**。 – 2011-06-13 12:19:11
“手动”和“按需”意味着我想发送保持活力*只要我想*,而不是每两个小时。 – David 2011-06-13 12:39:33