Problema al enviar y recibir datos con el control winsock

Iniciado por arias, 9 Abril 2006, 19:37 PM

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

arias

Hola:
Estoy creando un cliente msnp(MSN Messenger), en VB y al recibir los datos, de por ejemplo la lista de contactos, los recibo en el mismo paquete cuando tendrían que llegar separados en distintos paquetes de datos...
Lo que uso para obtener los datos es la típica funcion:


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim DT As String
    Winsock1.GetData DT, vbString, bytesTotal



Y un ejemplo de los datos recibidos (donde "<<<" es cada paquete recibido de servidor, en este caso el de MSN Messenger)

Citar
[...]
<<< LST seraferreixxx@xxx.com seraferreixxx@xxx.com 3 0
<<< LST theaiverxxx@xxx.com puede%20ser%20que%20nos%20agamos%20viejos,feos,morir%20pero%20lo%20que%20nunca%20olvidaremos%20sera 3 5
<<< LST silvy_axxx@xxx.com oO%20>%20silvia%20<%20Oo 11 5
LST carlos_8xxx@xxx.com Por%20fin%20me%20llega%20el%20momento%20de%20ser%20feliz%20totalmente%20ya%20iban%20siendo%20horitas%20de%20serlo 11 0
LST damianxxx@xxx.com SHEYLA%20ERES%20LO%20MAS%20LINDO%20QUE%20HAI%20EN%20EL%20MUNDO%20TE%20QUIERO%20MUXISIMO%20MI%20VIDA 11 0
LST maria_scxxx@xxx.com (#)_MaRía_(#)--->No%20soy%20nada%20si%20tu%20no%20estás%20a%20mi%20
[...]

Como se puede observar los primeros paquetes los recibe correctamente, pero cuando es una transmisión de datos considerable, mezcla los paquetes.
Tanbien estoy creando un programa cliente/servidor, y é observado que en ocasiones al enviar datos, este no los envía hasta que vuelbes a enviar más datos, y por lo tanto los envia juntos.
Si alguien sabe lo que pasa le agradeceria que me lo dijera.
Gracias de Antemano

NYlOn

Intenta poniendo:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim DT, DD As String
    Winsock1.GetData DT
    DD = DD & DT


DD seria donde estan TODOS los datos.-

arias

El código que me facilitaste no me sirve, ya q necesito tratar la info por separado en el momento que sea recibida(cada paquete que llega) y asi lo que haces es juntarlos todos.
Gracias de todas formas.

NemeSys

Puede que el problema lo tengas porque no vacias el buffer del Winsock, algo parecido a lo que pasa en c si usas el teclado sin hacer flush despues:
Prueba esto...

Sub LimpiarBuffer(Winshock as MSComm )

Dim Voided as string
Do While Winshockl.InBufferCount > 0
     Voided = Winshock.Input
DoEvents
Loop

Esto vacia el winsock, es decir perderas lo que haya almacenado, asi que en lugar de machacarlo con una variable deberas enviarlo a cada pasada del bucle...

Saludos.

End Sub