【发布时间】:2011-08-10 20:57:39
【问题描述】:
我有一个名为“clientSock”的套接字。它已连接并正常工作。
我在线程中使用循环接收数据,如下:
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();
}
}
我正在考虑通过简单地向另一端发送“#KEEP-ALIVE”来发送“保持活动数据包”。
我可以使用sendStream.print("#KEEP-ALIVE") 来做到这一点。有没有更好的方法来做到这一点?如果没有,是否有一种有效的方法来检查您是否收到了数据包?或者已经存在可以让您检查另一端是否还活着的东西? clientSock.setKeepAlive(true) 不适合我。我需要根据需要检查另一端是否处于活动状态。
【问题讨论】:
-
一种选择是在客户端套接字上set a read timeout。
-
你在使用
linux吗?在 linux 中,默认保持活动时间为 2 小时。 -
“手动”和“按需”表示我想随时随地发送保持活动状态,而不是每两个小时发送一次。
标签: java sockets networking keep-alive