2011-08-30 153 views
6

有三個重載構建TcpListenerTcpListener:如何偵聽所有接口上的特定端口?

聽一個特定的端口,但在全部 availa ble接口。有一個過載可以做到這一點,但它被標記爲obsolete

在.NET中使用TcpListener的所有接口上的特定端口進行偵聽的新優先/非淘汰方法是什麼?


對於樂於助人起見,一個IPEndPoint是:

public IPEndPoint(
    IPAddress address, 
    int port 
) 

這是第三過載是什麼。和IPAddress需要,因爲它的構造:

  • 一個byte[]
  • Int64
  • 一個byte[]Int64

回答

19

只需綁定到IPAddress.Any - 這是怎麼這通常..不知道,但可能是你需要綁定到IPAddress.IPv6Any

SO post建議您綁定到每個IP addresse明確 - 這SO post對如何獲得的所有IP代碼不會忽略...


MSDN

如果你這樣做不關心分配了哪個本地地址,請爲localaddr參數指定IPAddress.Any,並且底層服務提供商將分配最合適的網絡地址。


MSDN

IPAddress.Any

提供指示服務器應該監聽客戶端活動上所有網絡接口的IP地址。

+1

耶穌;它比我想象的更糟糕。你必須枚舉所有的接口,並手動說你想綁定到所有的接口。 –

+0

與Mono的Linux,它足以綁定到任何因爲這是「實際0.0.0.0」,這意味着「所有接口」...... – Yahia

+2

嗯,它意味着「所有IPv4接口」,無論如何。 –