2009-02-03 13 views
7

Tenemos una pieza simple de software heredado con la que necesitamos comunicarnos mediante TCP/IP a través del puerto 15001. Necesitamos escuchar en el puerto 15001 para el software heredado para haga una conexión y luego lea lo que sea que nos envíe.TcpListener: Escuche en cada dirección, incluida la dirección IP GPRS

Hemos probado esta solución a través de Internet y funciona muy bien. Sin embargo, si probamos la misma solución a través de una red GPRS TCP/IP, no es así.

Se han verificado todos los aspectos básicos, podemos hacer ping a otros dispositivos en la red GPRS y el puerto 15001 no está bloqueado por ningún servidor de seguridad.

¿Entonces tal vez haya algún problema con mi TcpListener?

Se inicializa la siguiente manera:

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

Estoy asumiendo que escucha en todas las interfaces habilitadas IPv4 disponibles en el sistema, porque solía IPAddress.Any?

¿Alguien tiene alguna idea de la diferencia entre las dos redes? (Aunque no debería haber ninguna diferencia) y si hay algo que deba cambiar a mi TcpListener?

Respuesta

9

Debe especificar la dirección IP en la que desea escuchar, en lugar de IPAddress.Any. Ver here. Cuando use IPAddress.Any, automáticamente elegirá la interfaz de red para usted. Para escuchar en una determinada interfaz (en su caso, GPRS), debe usar la IP correcta en el constructor.

This post tiene más información sobre cómo obtener la dirección IP para cada nic.

Además, si está buscando escuchar en cada dirección IP a la vez, necesitará un TcpListener para cada nic.

+0

Interesante que un código de prueba compilado/ejecutándose bajo Mono, comienza a escuchar en 0.0.0.0 si el IPAddress.Any se pasa al constructor. –

+0

Está usando IPAddress. ¿Algo análogo al uso del constructor TcpListener (int Port) que está en desuso? –