none
Solo se permite un uso de cada dirección de socket (protocolo/dirección de red/puerto) RRS feed

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




    lunes, 23 de julio de 2018 23:13

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
    martes, 24 de julio de 2018 5:43
    Moderador

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
    martes, 24 de julio de 2018 5:43
    Moderador
  • 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?



    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
    miércoles, 25 de julio de 2018 23:21