2013-12-09 106 views
0
  1. 我使用127.0.0.1和port#創建一個c#套接字。現在我創建一個本地客戶端(與服務器在同一臺機器上本地運行)並嘗試使用機器的fqdn進行連接。它不起作用。如果我使用127.0.0.1而不是fqdn作爲客戶端,它就可以工作。 反之亦然,如果我使用本地機器的fqdn和端口#創建服務器,並且客戶機使用127.0.0.1,則不起作用。如果我在客戶端使用fqdn,那麼事情就會起作用。這讓我想到機器自己的IP地址/ fqdn和127.0.0.1之間有什麼區別,因爲我在印象之下他們都會引用同一臺機器。是127.0.0.1與IP地址不同嗎?

  2. 在C#UdpClient的情況下,我們只指定端口#。那麼c#如何處理這個問題呢?

  3. 如果一臺機器有多個網卡,並且我們只是指定端口#(例如UdpClient),那麼使用什麼網卡來創建端口?

+0

嘗試將服務器綁定到0.0.0.0。然後FQDN和127.0.0.1都可以工作。 – uselpa

回答

0
  1. 您的客戶端解決這可能指向另一個接口,而不是回送的FQDN。他們將推薦人引向同一臺機器,但他們是不同的接口。
  2. According to MSDN,UdpClient將在「默認界面」上偵聽
  3. 再次,無論微軟定義爲「默認界面」。實際上,這意味着如果你在一個IP地址上收聽,你只會獲得該IP的流量限制。
+0

感謝您的回答! – user2574953

1

IP地址127.0.0.1是每臺計算機上存在的本地環回虛擬網絡適配器的地址。此虛擬適配器完全位於操作系統內部,無法從其他位置連接。在同一臺機器上運行的程序可以相互通信,但沒有別的。

當您使用FQDN連接到計算機時,該名稱將解析爲屬於該名稱的IP地址,通常是附加到外部網絡適配器的地址。假設你的計算機的網絡地址是192.168.0.2。當您嘗試連接到該地址的任何端口時,它將不會連接到偵聽127.0.0.1的程序,而不會連接到偵聽地址192.168.0.3的其他計算機上的永不

地址很重要。

如果您希望程序接受連接到計算機的任何網絡適配器上的連接,請將其綁定到,每地址:0.0.0.0

+0

感謝您的回答!所以看起來像0.0.0.0不包括127.0.0.1?我寫了一個小程序來驗證。 – user2574953

+0

不,聽'0.0.0.0'應該接受所有地址的連接,包括'127.0.0.1'。你如何測試這個讓它失敗? – Corey

+0

是。我寫錯了這個程序。 – user2574953