La Web del Programador: Comunidad de Programadores
 
    Pregunta:  63677 - SOCKET ASINCRÓNICO
Autor:  Julian Garcia
Buenas tardes, esperando alguien me pueda auxiliar. Tengo una aplicación VB Net para windows que utiliza sockets de forma asíncrona para conectarse y enviar tramas de datos, de cliente a servidor; los clientes su ubican por toda la ciudad y utilizan distintas IPs y puertos. Bajo un ambiente de pruebas (IPs locales), los clientes se conectan, envían tramas y reciben su respuesta de forma correcta, y puedo conectar los clientes que quiera. Sin embargo al conectar a N cantidad de clientes ya de forma real por toda la ciudad, se comienzan a colgar conexiones o bien se duplican dichas conexiones creando un caos, mientras trabajan uno o dos clientes todo funciona bien, el problema se genera al conectar varios clientes. Revisé mi código y encontré errores al asignar valores al RemoteEndPoint del socket, sin embargo el problema sigue. Desafortunadamente la ayuda de microsoft y sus ejemplos no son suficientes. Mi pregunta es ¿por qué la aplicación no se comporta igual en pruebas que en la realidad si todo es el mismo procedimiento?, o bien si alguien sabe donde puedo encontrar más información o una aplicación ejemplo, pues en google he encontrado poco acerca del tema.

  Respuesta:  Julian García
Gracias por tus comentarios Alberto, actualmente ya no tengo el proyecto que menciono, sin embargo pude saber de forma posterior que los sockets llegan a comportanse de ese modo. Cuando la conexión se pierde se crea otra conexión y la anterior se "cuelga". Una opción que encontré fué programar un "keep-alive" que mantuviera mi conexión, o bien cerrar por completo la conexión cuando no se utilizara, eso también mejora el performance. Un compañero me sugirió utilizar otro lenguaje que no fuera VB net pues no es muy bueno para este tipo de proyectos.
Saludos!

  Respuesta:  albe delg
mira he hecho algunos programitas de soker y paso lo mismo creo q a todos le ha pasado y siempre se descubre cuando se implanta la aplicacion, en mi caso los problemas han sido en el modo de cerrar la conexion del cliente, un ejemplo cuando el cliente abre una sesion y despues tiene problemas con la red y se desconecta, para el servidor sigue conectado y el vuelve a abrir otra sesion... y se te duplica. En los jabber no sucede eso pq solo tienes una unica sesion q siempre esta activada tu solo entras o no...
yo he resuelto lo mio algunas veces con un pequenno parche, como verificar si la nueva sesion existe y borrarla antes de crear...
espero q te ayude en algo.