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.
..Bueno no entendí muy bien pero podrías resetear los sóckets antes de reutilizarlos.
salu2
Tutorial del control WinSock
http://foro.elhacker.net/index.php/topic,75832.0.html
Tema pegado...
Saludos.
Mmmm y ¿cómo lo reseteo?
Gracias por el tutorial. Lo estoy leyendo.
CitarMmmm y ¿cómo lo reseteo?
Winsock1.Close
Winsock1.Listen / .Connect 'depende si es cliente o servidor.
Saludos y Feliz año a todos!.-
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.
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.-
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
O sino, en los eventos Close y Error podes poner Winsock1.Close
Saludos.-
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:
CitarPD: ¿Destruir un socket?
Si usas APIs para controlar los sockets los podes crear en tiempo de ejecucion y destruirlos...
Saludos.-
Analice bien la idea de arriba y esta bien lo que se dice con respecto a que el estado pudiese ser "Cerrando." pero no sería posible enviar un mensaje ya que en los dos puntos se ejecuta el método CLOSE. Además el problema, al parecer reside en el cliente y no en el server.
Con respecto a lo de hacer un socket con API parece ser buena la idea. ¿Tienes información al respecto?
Gracias.
Ya lo solucioné.
Sólo había que reiniciar el localport. Osea winsock1.localport = 0.
Gracias a todos.
me podrian decir como transferir un archivo (un .exe por ejm) por medio del winsock. Se los agradeceria muchisimo
yo tmb necesito envia un archivo exe y no puedo no se como hacerlo y me toy volviendoo loco :'( no cmo no duermoo :'( :'( :'(
Citarno cmo no duermoo
Eso no ayuda en nada... Cuando tenga tiempo posteo el codigo.
Saludos.-
no te mates mira si buscaras podrias comer. en la parte de virus y troyanos hay un post q esta pegado creo que es este troyano en vb desde 0 por fulano. hay tens de todo y tenes para mandar archivos anda muy bien lo unico que le tenes que solucionar unas cosas que no interfieren en la parte de subir o enviar archivos. Salu2
Sancho Mazorca :P