Aucune connexion n'a pu être établie car l'ordinateur cible refuse activement
Je suis en train de travailler sur un simple hello world client TCP/IP du serveur d'application en C# et je suis incapable d'obtenir mon client pour se connecter. Quelqu'un peut-il offrir à toute les étapes de dépannage supplémentaires? Je commence à manquer d'idées...
Voici les articles pertinents du code:
serveur:
Console.Out.WriteLine("About to bind address");
IPAddress ipAd = IPAddress.Parse("127.0.0.1");
Console.Out.WriteLine("Choose a port to bind...");
String port = Console.In.ReadLine();
int iPort = Int32.Parse(port);
TcpListener myList = new TcpListener(ipAd, iPort);
myList.Start();
Console.WriteLine("The server is running at: "+myList.LocalEndpoint);
Console.WriteLine("Waiting for a connection.....");
Socket s = myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
client:
Console.Out.WriteLine("enter address: ");
string address = Console.In.ReadLine();
Console.Out.WriteLine("enter port: ");
int port = Convert.ToInt32(Console.In.ReadLine());
TcpClient tcpclnt = new TcpClient();
Console.WriteLine("Connecting.....");
Console.Out.WriteLine("Address: " + address + ":" + port);
tcpclnt.Connect(address, port);
Je suis capable de faire un ping du serveur à partir de la machine client, cependant, je suis incapable de telnet au serveur en utilisant le port. J'ai essayé une variété de ports (un peu dans le bas 8000s et un peu de place autour de 40000). J'ai désactiver le pare-feu windows sur les deux systèmes. Les systèmes sont connectés à un routeur qui n'est pas sur l'internet. J'ai essayé avec et sans la redirection de port configuré pour transférer les requêtes entrantes sur le port de la machine serveur avec aucun effet.
La seule exception que j'ai pu le piège est levée par le client:
Aucune connexion n'a pu être faite, parce qu'
la cible de la machine refuse activement
c'.
J'ai vérifié pour une InnerException
mais il semble qu'il n'existe aucune - qui est la base de l'exception. Peut-être que le droit?
Pas sûr de ce autre chose que je devrais être à la recherche à toute les étapes de dépannage supplémentaires seraient utiles.
Merci!
OriginalL'auteur Brian Sweeney | 2009-02-13
Vous devez vous connecter pour publier un commentaire.
Le code ci-dessus est à l'écoute de la demande en provenance de l'adresse de bouclage. Cela aura pour effet de n'écouter que de la connexion sur ce réseau, et que le réseau ne comprend votre machine.
Avez-vous essayé d'écoute à l'adresse liée au réseau à partir de laquelle la connexion doit être à venir? Sur un réseau local, il doit être quelque chose comme 192.168.x.x ou 10.x.x.x
Votre machine est assis sur plusieurs réseaux IP dans le même temps, dans votre cas, le bouclage et le réseau local. Vous l'avez explicitement demandé de l'écouter 127.0.0.1 et la seule machine sur 127.0.0.1/32 est le vôtre. La machine peut se connecter à lui-même (via 127.0.0.1/32), mais pas d'autre pourrait.
OriginalL'auteur Coincoin
J'ai couru dans cette avant que. L'astuce consiste à lier
0.0.0.0
plutôt que127.0.0.1
. Lorsque vous liez à127.0.0.1
le serveur n'acceptera des connexions à partir de localhost. La liaison à0.0.0.0
il accepte toutes les demandes.Vous voudrez peut-être aussi nmap la machine hôte du client et de voir quels ports il voit comme étant ouvertes.
EDIT: Si vous coder en dur l'adresse IP de la machine en elle l'auditeur n'écouter que sur cette interface réseau. Si vous utilisez
0.0.0.0
l'auditeur d'écouter sur toutes les interfaces réseau disponibles. Cela inclut les interfaces entre votre ordinateur et un attaché USB périphérique de poche, une seconde carte réseau ou une liaison VPN.alors quelle serait la différence entre 0.0.0.0 et l'adresse IP réelle comme suggéré par du coincoin ci-dessus? c'est la solution que je suis allé avec et il semble fonctionner très bien.
La différence est que si vous coder en dur l'adresse IP, il ne fonctionnera que sur une interface réseau avec cette adresse. Si vous utilisez 0.0.0.0 il sera à l'écoute sur toutes les interfaces réseau disponibles.
OriginalL'auteur Mykroft
essayer
netstat -al
sur votre machine (la ligne de commande exacte varie entre Windows et unix) et voir si le serveur est en écoute sur le portOriginalL'auteur Nick Fortescue
Pourquoi n'utilisez-vous pas .NET remoting? C'est mieux que de faire un client TCP/IP serveur. Vous pouvez passer des messages entre les objets.
OriginalL'auteur David Basarab
Avez-vous essayé de lancer le client-serveur sur la même machine pour s'assurer que la connexion est faite en premier? Au-delà de qui essayer d'utiliser le routeur affecté ou statique IP de l'ordinateur exécutant le serveur vs liaison de bouclage.
OriginalL'auteur Quintin Robinson