2011-03-20 63 views
0

是否無法通過NetTcpBinding指定用於服務器調用的本地客戶端端口?在NetTcpBinding上指定客戶端端口(和IP)

NetPeerTcpBinding支持這個 - 我很難相信沒有辦法在客戶端上指定本地端口(和IP地址)。

我需要能夠使用端口共享,如果我不知道客戶端正在監聽的端口,我無法做到這一點。我將無法與另一個客戶端共享端口(和IP),因此無法連接。

我發現的唯一的,周圍的工作是這樣的:

  • 客戶端A打開
  • 服務器記錄的IP地址和客戶端的端口A
  • 服務器共享這個信息到服務器的連接。與 客戶B
  • 客戶端B應該能夠 連接到客戶端A上的指定IP 和端口(理論上)

這被稱爲TCP/IP NAT打洞,我相信。任何有此經驗的人?

+0

澄清:當你說端口共享時,你的意思是服務器上的多個應用應該共享同一個端口,對吧? – steinar 2011-03-20 04:27:12

回答

2

您可能不明白與NetTcpBinding的通信模式。它的工作原理是這樣的:

  1. 客戶端打開連接到服務器
  2. 雙向溝通:客戶端調用服務器和得到了相同的連接的響應。
  3. 雙工通信:客戶端調用服務器。服務器在某處存儲對頻道的引用(您必須實現此功能)。一旦服務器想要通知客戶端關於存儲通道所需的任何內容,並且在客戶端首次調用期間建立的連接上調用客戶端。

服務器從不打開與客戶端的連接。客戶端不會公開帶有端口的任何地址用於傳輸通信。如果你想這樣做,你必須像在服務器上那樣在客戶端上實現服務,並且你必須手工發送地址和端口到服務器公開的服務。

NetPeerTcpBinding的區別在於沒有真正的服務器,並且任何客戶端都必須能夠獲得輸入請求。 NetTcpBinding適用於客戶端 - 服務器方案,其中服務器是唯一能夠處理輸入請求的對等方。因爲只有服務器需要定義地址和端口。

+0

因此,如果服務的目標是記錄Intranet環境中客戶端的IP地址和端口號,那麼在nettcpbinding中沒有辦法做到這一點? – Redis1001 2017-09-04 07:10:41