2011-08-30 19 views
6

Ci sono tre sovraccarichi per la costruzione di un TcpListener:TcpListener: come ascoltare sulla porta specifica su tutte le interfacce?

i voglio per l'ascolto su una determinata porta, ma su all availa interfacce Lì era un sovraccarico disponibile per farlo, ma è stato contrassegnato come obsolete.

Qual è il nuovo modo preferito/non obsoleto per ascoltare su una particolare porta su tutte le interfacce con un TcpListener in .NET?


Per l'amor disponibilità, un IPEndPoint è:

public IPEndPoint(
    IPAddress address, 
    int port 
) 

che è ciò che il 3 ° di sovraccarico è. E un IPAddress prende, come il suo costruttore:

  • un byte[]
  • un Int64
  • un byte[] e un Int64

risposta

19

Proprio legarsi alla IPAddress.Any - è così che questo di solito è fatto .. Non sono sicuro, ma potrebbe essere che è necessario associare a IPAddress.IPv6Any troppo.

Questo SO post suggerisce che si associa a ogni addresse IP in modo esplicito - e questo ha SO post codice su come ottenere Indirizzi IP tutto ...


Da MSDN:

Se lo fai non interessa quale indirizzo locale è assegnato, specificare IPAddress.Any per il parametro localaddr e il provider di servizi sottostante assegnerà l'indirizzo di rete più appropriato.


Da MSDN:

IPAddress.Any campo

Fornisce un indirizzo IP che indica che il server dovrebbe essere in ascolto per l'attività client su tutti interfacce di rete.

+1

Gesù; è peggio di quanto pensassi.Devi enumerare tutte le interfacce e dire manualmente che vuoi associarle tutte. –

+0

su linux con Mono è sufficiente collegarsi a Any perché quello è "effettivamente 0.0.0.0" e significa "tutte le interfacce" ... – Yahia

+2

Beh, significa "tutte le interfacce IPv4", comunque. –