2009-02-03 9 views
7

Nous avons un simple morceau de logiciel hérité avec lequel nous devons communiquer en utilisant TCP/IP sur le port 15001. Nous devons écouter sur le port 15001 pour le logiciel existant à établir une connexion et ensuite lire tout ce qu'il nous envoie.TcpListener: écouter sur chaque adresse, y compris GPRS adresse IP

Nous avons testé cette solution sur Internet et cela fonctionne très bien. Si toutefois nous testons la même solution sur un réseau TCP/IP GPRS, ce n'est pas le cas.

Toutes les bases ont été vérifiées, nous pouvons faire un ping sur d'autres appareils dans le réseau GPRS et le port 15001 n'est pas bloqué par un pare-feu.

Alors peut-être que quelque chose ne va pas avec mon TcpListener?

Il est initialisé comme ceci:

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

Je suppose qu'il écoute sur chaque interface IPv4 activé disponible sur le système, parce que je IPAddress.Any?

Quelqu'un at-il une idée de la différence entre les deux réseaux? (Même s'il ne devrait pas y avoir de différence) et s'il y a quelque chose que je dois changer à mon TcpListener?

Répondre

9

Vous devez spécifier l'adresse IP sur laquelle vous souhaitez écouter, au lieu de IPAddress.Any. Voir here. Lorsque vous utilisez IPAddress.Any, il choisira automatiquement l'interface réseau pour vous. Pour écouter sur une certaine interface (dans votre cas, GPRS) vous devez utiliser l'adresse IP correcte dans le constructeur.

This post a plus d'informations sur l'obtention de l'adresse IP pour chaque nic. En outre, si vous cherchez à écouter sur chaque adresse IP à la fois, vous aurez besoin d'un TcpListener pour chaque NIC.

+0

Intéressant qu'un code de test compilé/fonctionnant sous Mono, il commence à écouter sur 0.0.0.0 si le IPAddress.Any est passé au constructeur. –

+0

IPAddress utilise-t-il.Un analogue à l'utilisation du constructeur TcpListener (int Port) qui est obsolète? –

Questions connexes