2009-09-05 3 views
2

Je suis un tutoriel @http://www.geekpedia.com/tutorial239_Csharp-Chat-Part-1---Building-the-Chat-Client.html pour essayer de rassembler les bases du réseau. Pour ceux qui ne veulent pas sauter le saut, c'est un tut rapide montrant comment programmer une simple application de chat client-serveur-modèle. Lorsque j'essaie d'exécuter le code dans le tut, cela fonctionne correctement tant que le client et le serveur sont sur le même réseau, mais le second j'essaie de le faire en externe (obtenir un mate pour exécuter le client) application, et l'exécution de l'application du serveur de mon côté), tout va en pot. Le fait que le code fonctionne lorsqu'il est dans le même réseau me porte à croire que ce n'est pas un problème de codage, mais un problème avec la façon dont mon réseau est mis en place. J'essaye d'exécuter le serveur sur mon adresse IP au port 21719, que j'ai ouvert, mais encore d'autres personnes ne peuvent pas se connecter à mon serveur, ne pouvant obtenir aucune forme de réponse du tout.Aucune réponse de sever sur IP externe dans l'application IM client-serveur

Le code (du Tut) qui est utilisé pour le serveur pour écouter les connexions est:

public void StartListening() 
     { 


      IPAddress ipaLocal = ipAddress; //ipAddress is parsed from txtIP 


      tlsClient = new TcpListener(ipaLocal, 21719); 


      tlsClient.Start(); 


      ServRunning = true; //for the running loop 

      // Start the new tread that hosts the listener 
      thrListener = new Thread(KeepListening); 
      thrListener.Start(); 
     } 

Maintenant, le tutoriel ne pointe en fait que IPAddress ipaLocal = ipAddress;

Cela causera des problèmes sur certaines configurations, et je commence à craindre que ma configuration puisse être incluse dans cela.

Alors, est-ce que quelqu'un a une solution pour moi?

Merci, Sam

+0

Etes-vous sur une adresse IP routable sur Internet, ou êtes-vous assis derrière un gataway NAT? Si ce dernier vous avez transféré votre port de serveur de votre routeur à votre serveur? – nos

+1

vos clients peuvent-ils utiliser Telnet: ** telnet yourip 21719 **? Ils pourraient ne pas être en mesure de faire beaucoup, mais s'ils se connectent alors c'est un indice quant à ce qui se passe. – spender

+0

spender - Je viens de recevoir un compagnon de telnet, la connexion a expiré. Donc je pense que nous avons trouvé le problème, c'est avec ma config. Des idées sur ce qui peut être fait? –

Répondre

0

Avez-vous des gens utilisent votre adresse IP externe (Internet)? (Voir le vôtre here.)
Avez-vous épinglé votre routeur pour transférer toutes les communications du port 21719 vers votre serveur?

+0

Ouais, j'ai, à tous les deux. –

+0

Eh bien, si l'application fonctionne sur votre réseau local, le problème est lié à la connectivité. Déterminez ce qui bloque la connexion et tout devrait fonctionner correctement. –

0

Quelques conseils:

  1. Quel type de système d'exploitation utilisez-vous? Veuillez vérifier l'étendue et/ou les profils (sous l'onglet Avancé) de votre règle de pare-feu.
  2. Pendant que votre ami essaie de se connecter au port telnet (se connecter au serveur im), surveillez le trafic en utilisant Wireshark ou Network Monitor (Wireshark a des problèmes avec Vista et Win 7). Si vous ne voyez rien qui heurte votre machine, le problème est probablement du côté du routeur. Vérifiez les paramètres - vous avez dit que vous avez défini la règle de transfert (NAT) mais avez-vous également défini la règle sur le pare-feu de votre routeur?
1

Quelle est l'adresse IP locale que vous utilisez? (ipAddress) Si c'est 127.0.0.1, ce n'est pas correct (je ne sais pas comment cela fonctionnerait en interne non plus, mais Windows semble utiliser la magie de temps en temps). En outre, si vous avez plusieurs cartes réseau dans votre machine locale, peut-être que la redirection de port n'est configurée que pour la redirection vers l'une d'entre elles, et que vous utilisez l'adresse IP de l'autre?

Si ce n'est pas le problème, voici quelques suggestions génériques:

  1. Prenez une copie de netcat. C'est un petit utilitaire de test de réseau dont le seul travail consiste à former une simple connexion TCP. Cela vous permettra d'éliminer votre code en tant que variable dans tout cela. Si Netcat peut former une connexion, alors vous savez que le problème est votre code. Sinon, vous avez confirmé que c'est votre routeur.

  2. Vous pouvez utiliser WireShark (ou TShark) pour rechercher des paquets ICMP. Capturez les paquets ICMP sur la machine distante. Si vous obtenez "Destination inaccessible" du routeur, vous avez de nouveau prouvé que c'est votre routeur.

Comme Spencer dit que vous devez vous assurer que la redirection de port est configuré sur votre routeur, de transmettre tous les paquets qui viennent sur le port 21719 à votre machine interne. En ce qui concerne exactement comment faire cela, il est difficile de dire sans savoir quel type de routeur.

Questions connexes