Ayuda con winsock.

Iniciado por ciruit, 31 Diciembre 2005, 18:22 PM

0 Miembros y 1 Visitante están viendo este tema.

ciruit

Buenas.
Estoy en un proyecto "chat" entre dos pc. He creado sólo un formulario el cual actua como cliente y server. Cuando se hace la petición de A hacia B, sólo B queda server. Si se desconecta uno los dos pasan a ser servers y asi...
El punto es que, una vez establecida la conexión, si cierro el socket en A (cliente) los dos son server (arriba lo explique xD) y si me quiero volver a conectar desde B hacia A (ahora al revéz) no hay ningun problema. PERO si alguno está actuando como cliente, y desde el mismo cierro el socket ya no me puedo volver a conectar al server que estaba con anterioridad (en netstat me aparece TIME_WAIT, osea como si tuviera algo pendiente que recibir, cosa que no debería aparecer), quedando bloqueada tambíen la petición de conexión desde el server al cliente. Osea ya no funciona ninguno de los dos casos. Entonces en necesario cerrar tanto server como cliente para que vuelvan a la normalidad.

Ahora la pregunta del millón:
¿Que puede estar obstruyendo la re-petición desde un mismo punto a otro?

Gracias.

MaLkAvIaN_NeT

..Bueno no entendí muy bien pero podrías resetear los sóckets antes de reutilizarlos.

salu2
a por las buenas ideas

Slasher-K




A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

ciruit

Mmmm y ¿cómo lo reseteo?
Gracias por el tutorial. Lo estoy leyendo.

NYlOn

CitarMmmm y ¿cómo lo reseteo?
Winsock1.Close
Winsock1.Listen / .Connect 'depende si es cliente o servidor.


Saludos y Feliz año a todos!.-

ciruit

Emmm... eso lo hago siempre ;D.
El punto es que el cliente no es capaz de cerrar correctamente la conexión por el puerto especificado.
He hecho una prueba que primero ocupe un puerto y en la próxima conexión otro diferente y no hay problema tanto desde cualquier punto.
Es decir el puerto queda ocupado y no se cierra por completo a pesar de que cerre el socket.
Tal vez existe alguna función capaz de cerrar completamente una conexión sin importar su estado.
Ojala me puedan ayudar.
Saludos.

NYlOn

No estas usando un OCX verdad?? Eso de indicar que se cierren los puertos e igual quedan abiertos creo que sucede con las APIs.
Intenta destruyendo los sockets, hay una funcion que lo hace,
buscala.

Un saludo y feliz año.-

Sancho.Mazorka

hola eso me pasa a mi tambien pero es porque si cerras el servidor con ws.close el cliente queda en Cerrando conexion que seria el estado numero 8 y para solucionarlo tendrias que hacer antes de cerrarlo hacer ws.sendata "cerrar" y en el dataarrival del otro poner esto
ws.getdata datos, vbstring
if datos = "cerrar" then ws.close 'osea si es el server ws.close y despues ws.close y si no ws.close solo


PD: espero que te sirva el mas cerca fue NYlOn.


Sancho Mazorka     :P
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html



NYlOn

O sino, en los eventos Close y Error podes poner Winsock1.Close

Saludos.-

ciruit

Cita de: Sancho.Mazorka en  2 Enero 2006, 00:38 AM
hola eso me pasa a mi tambien pero es porque si cerras el servidor con ws.close el cliente queda en Cerrando conexion que seria el estado numero 8 y para solucionarlo tendrias que hacer antes de cerrarlo hacer ws.sendata "cerrar" y en el dataarrival del otro poner esto
ws.getdata datos, vbstring
if datos = "cerrar" then ws.close 'osea si es el server ws.close y despues ws.close y si no ws.close solo


PD: espero que te sirva el mas cerca fue NYlOn.


Sancho Mazorka     :P

Mmmm... creo que va por ahi la cosa. Pero el punto es que al presionar un botón que le puse "Desconectar" lo primero que hace es llamar al método CLOSE y además en el evento Close también esta puesto el método close entonces es extraño.
Voy a probar lo que me dices y te cuento.

PD: ¿Destruir un socket? :shocked: