[英]What happens to data received by a socket in case of timeout exception during readShort()?
我正在使用TCP套接字開發客戶端(Java)/服務器(C ++)應用程序。 我使用的協議由以2個字節開頭的消息組成,這些消息定義消息內容的類型。 因此,基本上,接收線程等待循環接收數據。 但是我想對套接字使用超時,以通知其他主機花費太長時間來發送數據。
receivingSocket.setSoTimeout(durationInMilliseconds);
DataInputStream in = new DataInputStream(receivingSocket.getInputStream());
boolean success = false;
short value = 0;
do {
try {
value = in.readShort();// will throw a SocketTimeoutException in case of timeout, without 2 bytes available from the socket
success = true;
} catch (SocketTimeoutException e) {
/// do something if it happens to often. Otherwise go on with the loop
}
} catch (IOException e) {
/// abort connection in case of other problem
}
} while (!success)
現在,如果接收線程在套接字的緩沖區中只有一個字節可用時調用in.readShort()會發生什么? 這個字節是否保留在套接字的堆棧上? 還是迷路了? 在第一種情況下,下次調用in.readShort()時我可以閱讀它,否則似乎永遠丟失了...
readShort()這是一個示例,我的問題也代表readInt(),...
謝謝你的幫助,
未指定。 我相信該實現方式的工作方式是丟失一半數據,但是無論如何都沒有寫任何其他內容,因此您只需要假設最壞的情況即可。
但是,實際上,如果您在發件人處觀察到常識,則極不可能發生這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.