簡體   English   中英

TCP:當服務器在隨機端口上偵聽時,客戶端如何知道要發送到哪個端口?

[英]TCP: When server listening on random port how does client know which port to send to?

問題:在Java中,您可以使用ServerSocket(0)在服務器上創建一個套接字,它將選擇一個隨機端口進行監聽。 但是,當您在客戶端上創建套接字以使用Socket(addr,port)發送消息時,沒有明顯的方法來確定您需要將服務器發送到哪個端口。 除了基本的“如果您輸入0,它將選擇一個隨機端口”,我無法通過網絡搜索找到有關此選項的任何信息。 是否有人知道或有資源可以從客戶端解釋這種情況?

一些背景:我目前正在將系統從UDP轉換為TCP。 我需要服務器在隨機端口上進行監聽的原因是我的服務器/客戶端沒有嚴格的服務器/客戶端關系。 因此,這種情況下的“服務器”實際上是我需要在一台PC上打開多個實例的應用程序。 具有預定發送/接收端口的舊方法是僅使一個實例能夠打開端口,並且所有通信都將重定向到該實例。 我的理解是,解決此問題的最佳方法是讓每個實例使用不同的端口,而最好的方法是執行ServerSocket(0)。 盡管包括此背景知識,但我不想評論這種情況的混亂程度,而只想回答與該問題有關的答案。

也許,如果您與所有服務器/客戶端位於同一IP子網中,則可以使用UPnP發出信號,指示正在運行應用程序的新實例的哪個隨機端口,並且類似地,其他實例可以監視UPnP以發現此新實例。 我從來沒有用Java實現UPnP,但是懷疑庫在那里。 https://github.com/jupnp/jupnp

如果固定端口號不是服務器記錄的設置/協議的一部分,則客戶端要弄清的唯一方法是讓正在運行的/活動的服務器在某些數據存儲中發布該信息,並記錄和知道其位置和詳細信息客戶端,以及客戶端可以訪問該數據存儲的位置。

[或者讓客戶端在每次想要連接時都運行一個端口。 它可以工作,但可能不如您的用戶所希望的快。]

您的情況確實搞砸了。

暫無
暫無

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

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