簡體   English   中英

沒有NIO的全雙工TCP連接是不可能的?

[英]Full duplex TCP connection without NIO impossible?

我有兩個單獨的Java進程通過單個TCP連接進行通信。 該協議不是類似於HTTP的簡單同步請求/響應。 雙方均可獨立發起請求並發送數據。 我想使用線程和阻塞套接字來實現這一點,避免使用NIO。 但這有可能嗎?

Java套接字(java.net.Socket)不是線程安全的,因此不允許我在一個線程中從套接字讀取數據,而同時在另一個線程中對其進行寫入。 (這是真的嗎?)當雙方都被阻止寫入套接字時,此限制顯然會導致死鎖。

因此,如果不使用NIO,就無法在Java中實現TCP之上的某些協議,否則我會遺漏一點嗎?

謝謝。

全雙工通信當然是可能的。 如果沒有NIO,則需要一個線程從套接字讀取(並執行請求的處理)。 同時,另一個線程可以寫入同一套接字。

如果您可以指出一些說明套接字不是全雙工的文檔,那么我將嘗試對其進行說明。

我不知道您在哪里讀到Java套接字通常是線程不安全的。 您不能同時有多個線程從套接字的流中寫入或讀取,但是沒有理由不能對線程寫入套接字的OutputStream和從線程的InputStream讀取另一個線程。

套接字是線程安全的,因此使用多個線程(一個用於讀取,一個用於寫入)沒有問題。 另一方面,如果要避免使用多個線程,則需要在執行任何出站操作時對套接字輸入流執行輪詢,以查看是否定期有傳入數據。

暫無
暫無

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

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