我有一個名爲「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