我正在嘗試實現一個聊天應用程序,並且有一個關於使用TCP或UDP進行對等之間消息交換的設計選擇。我想使用TCP,但遇到以下問題。使用TCP處理多個線程
問題場景: Peer A正在監聽一個衆所周知的端口(如5555)。當對等體B想要發送消息給對等體A時,它連接到A上的端口5555.對等體A接受連接並啓動一個新的線程來處理與對等體B的通信,以便其他對等體(比如對等體C)能夠連接到對等A的5555端口。現在問題在於它不是一個請求/響應協議,所以我很困惑,如果對方A出於任何原因沒有回覆對方B,那麼由B發送的後續消息將被傳送到對等方A上的端口5555?對等體A將爲接收到的每條消息創建單獨的線程。
使用UDP可能會解決這個問題,我不會創建單獨的線程與每個對等進行通信,每個人都可以將消息發送到同一個衆所周知的端口。但我想使用TCP來保證消息將被傳遞。任何想法什麼是處理這個問題的好方法,並且只使用一個線程與同伴進行通信?
+1。此外,serverSocket應該只監聽預定義端口上的傳入連接;所有進一步的通信之間的通信將隨機(但預先安排)端口完成。 – Shark 2012-07-27 16:32:36
@Shark否。在服務器端,接受的套接字使用與監聽套接字相同的本地端口。不需要預先安排。有關ServerSocket應該做什麼的部分甚至沒有意義,因爲它當然不能做其他事情。 – EJP 2012-07-30 00:57:40