socket net example ejemplo c# .net tcp tcpclient tcplistener

net - tcpclient c# example



No se pudo establecer ninguna conexión porque la máquina objetivo lo rechaza activamente (5)

Estoy trabajando en una aplicación de servidor de cliente TCP / IP de hello world en C # y no puedo hacer que mi cliente se conecte. ¿Alguien puede ofrecer pasos de solución de problemas adicionales? Me estoy quedando sin ideas ...

Aquí están las secciones relevantes del código:

servidor:

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);

cliente:

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);

Puedo hacer ping al servidor desde la máquina del cliente, sin embargo, no puedo hacer telnet al servidor que usa el puerto encuadernado. He intentado una variedad de puertos (algunos en el bajo 8000s y algunos alrededor de 40000). Desactivé el firewall de Windows en ambos sistemas. Los sistemas están conectados a un enrutador que no está en internet. He intentado con y sin reenvío de puerto configurado para reenviar solicitudes entrantes en el puerto dado a la máquina servidor sin ningún efecto.

La única excepción que he podido atrapar es lanzada por el cliente:

No se pudo establecer ninguna conexión porque la máquina objetivo lo rechaza activamente.

Comprobé una InnerException pero parece que no hay ninguna, esa es la excepción base. ¿Podría ser eso correcto?

No estoy seguro de qué más debería estar mirando, cualquier paso adicional de solución de problemas sería útil.

¡Gracias!


¿Has intentado ejecutar el servidor del cliente en la misma máquina para asegurarte de que la conexión se realiza primero? Más allá de eso, intente utilizar el enrutador asignado o IP estático de la máquina que ejecuta el servidor, en lugar de vincularlo al bucle invertido.


¿Por qué no usas .NET remoto? Es mejor que hacer un servidor de cliente TCP / IP. Puede pasar mensajes entre objetos.


El código de arriba está escuchando la solicitud proveniente de la dirección de bucle invertido. Esto efectivamente solo escuchará la conexión en esa red, y esa red solo incluye su máquina.

¿Has intentado escuchar la dirección vinculada a la red desde la cual debería estar viniendo la conexión? En una red local, debería ser algo así como 192.168.xx o 10.xxx


Pruebe netstat -al en su máquina (la línea de comando exacta varía entre Windows y Unix) y vea si el servidor está escuchando en el puerto


Me he encontrado con esto antes. El truco es unir a 0.0.0.0 lugar de 127.0.0.1 . Cuando se vincula a 127.0.0.1 el servidor solo aceptará conexiones de localhost. Enlazando a 0.0.0.0 aceptará todas las solicitudes.

También puede querer nmap el equipo host del cliente y ver qué puertos ve como abiertos.

EDITAR: si codifica la dirección IP de la máquina, el oyente solo escuchará en esa interfaz de red. Si usa 0.0.0.0 el oyente escuchará en todas las interfaces de red disponibles. Esto incluye las interfaces entre su computadora y un dispositivo portátil conectado USB, una segunda tarjeta de red o un enlace VPN.