Sockets

Hola!
Estoy haciendo una aplicación de comunicaciones. El problema que tengo es que envío paquetes bastantes grandes (unos 10000 bytes) y de tamaño variable.
Cuando hago recv para recibir datos la función sale antes de tiempo. Me haría falta saber alguna forma de conocer el numero de bytes que he recibido para poder recomponer el paquete, pero recv siempre me devuelve 0. ¿Sabes cómo solucionar esto?, ¿O alguna forma de que recv no salga antes de tiempo?
Muchas Gracias y un saludo

1 respuesta

Respuesta
1
Coge un formulario e introduce el objeto winsock, si lo haces por código te sirve igual y prueba con este evento:
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
A través de este evento que se activa cuando el socket entiende que ha recibido algún dato por el puerto indicado podemos saber el nº de bytes de los datos enviados por el otro equipo.
Luego basta con hacer un bucle que recupere los datos hasta llegar a completar el tamaño total indicado.
Si el tamaño de los paquetes es demasiado grande y crees que puedes estar perdiéndolos por el camino prueba a partirlos y enviarlos poco a poco. Pero vamos yo he probado a enviar un pantallazo completo de un pc en formato bmp. Que ocupaba bastante aunque no te se decir cuanto y utilizando el dataarrival, el senddata en el equipo que envía y el getdata en el equipo que recibe de este modo:
Dim CH() As Byte
Winsock. GetData CH, vbByte + vbArray, bytesTotal
Este es un ejemplo introduciéndolo en un array puedes cambiar el ch() por una variable de string o lo que quiera.
Espero haberte sido útil, si prefieres enviarme el código y le echo un vistazo como prefieras.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas