簡體   English   中英

Java SocketChannel寫入在讀取時被阻止

[英]Java SocketChannel write blocked while reading

我試圖在兩個不同的線程(Android API 25級)中同時使用SocketChannel.writeSocketChannel.read

我將SocketChannel配置為阻止模式

為了閱讀,我創建了一個無限循環來讀取服務器中的所有內容:

// Make socketChannel.read() return after 500ms at most
socketChannel.socket().setSoTimeout(500);
while(!SHUTDOWN) {
    int read = socketChannel.read(buffer);
    if(read > 0 ){
      // Do something nice
      break;
    }
}

對於寫入,我每10秒寫入一次數據。

問題是,我發現有時寫入操作在讀取時被阻塞。

但是,如果我使讀取線程在每個循環中短暫睡眠(例如100ms),則此問題將不再出現。

看起來讀線程正在阻止寫線程

AFAIK,TCP連接可以同時提供雙向操作。 有人可以幫忙解釋一下嗎?

TCP Wikipedia-流控制中所述

TCP使用端到端流控制協議來避免發送方發送數據的速度過快,以至於TCP接收方無法可靠地接收和處理數據。 在各種網絡速度的機器進行通信的環境中,擁有流控制機制至關重要。 例如,如果PC將數據發送到正在緩慢處理接收到的數據的智能手機,則智能手機必須調節數據流,以免被淹沒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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