簡體   English   中英

如果在readShort()期間發生超時異常,套接字收到的數據會如何處理?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM