2009-02-03 12 views
7

Abbiamo un semplice software legacy con il quale abbiamo bisogno di comunicare tramite TCP/IP sulla porta 15001. Abbiamo bisogno di ascoltare sulla porta 15001 per il software legacy per fare una connessione e quindi leggere qualsiasi cosa ci mandi.TcpListener: ascolto su tutti gli indirizzi, incluso l'indirizzo IP GPRS

Abbiamo testato questa soluzione su Internet e funziona perfettamente. Se tuttavia testiamo la stessa soluzione su una rete TCP/IP GPRS, ciò non avviene.

Tutte le informazioni di base sono state verificate, è possibile eseguire il ping di altri dispositivi nella rete GPRS e la porta 15001 non è bloccata da alcun firewall.

Quindi forse c'è qualcosa di sbagliato nel mio TcpListener?

Si inizializzato in questo modo:

tcpServer = new TcpListener(IPAddress.Any, TCP_PORT); 

Sto assumendo si mette in ascolto su ogni interfaccia abilitata IPv4 disponibili sul sistema, perché ho usato IPAddress.Any?

Qualcuno ha idea di quale potrebbe essere la differenza tra le due reti? (Anche se non dovrebbe esserci alcuna differenza) e se c'è qualcosa che devo cambiare al mio TcpListener?

risposta

9

È necessario specificare l'indirizzo IP su cui si desidera ascoltare, anziché IPAddress.Any. Vedi here. Quando usi IPAddress.Any, scegli automaticamente l'interfaccia di rete per te. Per ascoltare su una determinata interfaccia (nel tuo caso, GPRS) devi usare l'IP corretto nel costruttore.

This post ha ulteriori informazioni su come ottenere l'indirizzo IP per ogni nic.

Inoltre, se stai cercando di ascoltare su tutti gli indirizzi IP in una volta, avrai bisogno di un TcpListener per ogni nic.

+0

Interessante che un codice di prova compilato/in esecuzione in Mono, inizia ad ascoltare su 0.0.0.0 se IPAddress.Any viene passato al costruttore. –

+0

utilizza IPAddress. È analogo utilizzare il costruttore TcpListener (int Port) che è deprecato? –