Principales respuestas
Solo se permite un uso de cada dirección de socket (protocolo/dirección de red/puerto)

Pregunta
-
Hola, tengo un servicio de Windows el cual trabaja con sockets y tcp. Hasta hace un par de días estaba funcionando bien pero ahora me esta saliendo el siguiente error:
Solo se permite un uso de cada dirección de socket (protocolo/dirección de red/puerto)
en System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)A pesar de que reinicié el servicio sigue presentando el mismo error. ¿A qué se debe esto y cuál es la solución?
public void ListenClient()
{
try
{
string ServidorIp = ListaArchivo[0].ToString();
string Puerto = ListaArchivo[1].ToString();
this.Tcp = new TcpListener(IPAddress.Parse(ServidorIp), Convert.ToInt32(Puerto));
this.Tcp.Start(); <---- se cae en esta línea
listening = true;
while (listening)
{
if (DateTime.Now <= Convert.ToDateTime("15/12/2020"))
{
Socket mySocket = null;
// Blocks until a client has connected to the server
try
{
mySocket = this.Tcp.AcceptSocket();
Thread.Sleep(1000);
byte[] bReceive = new byte[((1024 * (1024 * 2)))];
int i = mySocket.Receive(bReceive);
byte[] databyte = new byte[(i)];
int j = 0;
while ((j < i))
{
databyte[j] = bReceive[j];
j = (j + 1);
}
//PUSH
Zk_Utils.Analysis(databyte, mySocket);
}
catch(Exception ex)
{
//ObjDatos.Log("ListenClient. " + ex.StackTrace);
}
}
else
{
listening = false;
this.Tcp.Stop();
}
}
this.Tcp.Stop();
}
catch (System.Exception ex)
{
listening = false;
this.Tcp.Stop();
ObjDatos.Log("ListenClient. La conexión ha sido interrumpida. " + ex.Message + " \n" + ex.StackTrace.ToString());
//MessageBox.Show(("Please be sure that you are listening to the port number of your own PC. And \""" _
// + (TxtPuerto.Text + "\"" port is not occupied by other application or stopped by firewall." & vbCrLf)), "Important", MessageBoxButtons.OK, MessageBoxIcon.Information)
// _LOG_ERROR("LogErrores", "ListenClient - " + ex.Message);
}
}
- Editado mdeveloper21 lunes, 23 de julio de 2018 23:14
Respuestas
-
Ese error se debe a que ya hay otro programa escuchando en el mismo puerto. Puedes comprobarlo ejecutando "netstat -an" y verás que en la lista de conexiones ya hay algo escuchando en el mismo puerto que intentas usar desde tu servicio. Lo que ya es un poco más difícil es determinar cuál es el programa que lo tiene ocupado. puedes intentarlo con "netstat -anb" pero no siempre es capaz de proporcionarte información útil. Puede ser que sea una copia anterior de tu ejecutable, que se ha quedado "colgada" en memoria y no se para aunque pares el servicio. De ser así, podrías pararlo desde el administrador de tareas.
- Marcado como respuesta mdeveloper21 miércoles, 25 de julio de 2018 23:20
Todas las respuestas
-
Ese error se debe a que ya hay otro programa escuchando en el mismo puerto. Puedes comprobarlo ejecutando "netstat -an" y verás que en la lista de conexiones ya hay algo escuchando en el mismo puerto que intentas usar desde tu servicio. Lo que ya es un poco más difícil es determinar cuál es el programa que lo tiene ocupado. puedes intentarlo con "netstat -anb" pero no siempre es capaz de proporcionarte información útil. Puede ser que sea una copia anterior de tu ejecutable, que se ha quedado "colgada" en memoria y no se para aunque pares el servicio. De ser así, podrías pararlo desde el administrador de tareas.
- Marcado como respuesta mdeveloper21 miércoles, 25 de julio de 2018 23:20
-
Si hice ese procedimiento pero no encontre ningún servicio que se habia quedado pegado. Lo que hice fue cambiarle de puerto. Funcionaba por unas horas pero luego volvía a presentar ese error. ¿Hay otra forma de validar que es lo que está ocurriendo ya sea por código y/o Windows?
- Editado mdeveloper21 martes, 24 de julio de 2018 21:10
-
Bueno al parecer había un virus en el servidor y éste estaba bloqueando los puertos. Lo que se hizo fue pasar el servicio a otro servidor y se solucionó el inconveniente.
Saludos
- Editado mdeveloper21 miércoles, 25 de julio de 2018 23:21