簡體   English   中英

Java:用於查找是否已將寫入非阻塞TCP SocketChannel的所有字節發送到接收方的API?

[英]Java: API to find if all the bytes written to Non-Blocking TCP SocketChannel has been sent to receiver?

是一個類似的答案,盡管這並不是我真正想要的。 我想做以下兩件事:

  1. 我想確定是否所有字節都已發送到接收器?
  2. 我也想知道套接字輸出緩沖區的當前剩余容量,而無需嘗試對其進行寫操作嗎?

按順序編號:

  1. 您可以發現的唯一方法是讓對等應用程序確認收據。
  2. Java中沒有這樣的API。 據我所知,在BSD套接字層也沒有一個,但是我對Linux的外部限制並不熟悉,在Linux的外部限制中,它們可能已經引入了一些類似的東西。

你不知道 數據可能由OS和TCP / IP堆棧緩沖,並且沒有確定其是否已實際放置在網絡上的方法。 即使知道將其放在電線上也不能保證任何東西,因為它可能會在運輸中丟失。

對於UDP,除非編寫基於UDP的協議以使遠程系統確認該數據,否則您將永遠不知道目標系統是否已接收到該數據。

對於TCP,協議棧將確保在傳輸過程中丟失數據時通知您的代碼,但是可能需要幾秒鍾才能收到確認。

暫無
暫無

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

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