Autor
|
Tema: Error de transmision por socket (Leído 8,804 veces)
|
Nanoc
Desconectado
Mensajes: 166
|
Buenas, estoi usando el control winsock para una aplicacion, funciona todo perfectamente, tengo otra aplicacion en C que es la que conecta, ocurre, que al enviar un paquete grande desde la aplicacion en C, no llega todo a la que esta en VB, solo llega un pedazo.
En las pruebas que hice, vi que mi aplicacion en C enviaba correctamente todo concretamente 2057 bytes Pero en el VB, solo recibia 1460 bytes, y efectivamente no es correcto el resultado mostrado.
Alguna idea?
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
Código del DataArrival?... pero bueno, esto mismo tenia yo, y era el buffer de almacenamiento en el DataArrival, así al aire no se puede deducir mucho.
Sangrientas Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Nanoc
Desconectado
Mensajes: 166
|
El buffer es un tipo String, no he puesto antes el codigo del data arrival por que dudo mucho que sirva de algo, como ya he dicho, funciona perfectamente excepto con los paquetes grandes, de todos modos colocare esta parte Dim Data As String Dim sBuffer() As String
sBuffer = Split(Data, ",") Select Case (sBuffer(0)) Case ("ld") Select Case sBuffer(1) Case "0" Form3.List1.Clear Call Form3.mostrararchivos(sBuffer, True) Ws.SendData ("ld, ,1") Case "1" Form3.List2.Clear Call Form3.mostrararchivos(sBuffer, False) MsgBox "Bytes received: " & bytesTotal Case "failed" MsgBox "Error al listar archivos" End Select Podria ser por algun parametro interno de winsock que me limita los bytes a recibir? puedo modificarlo? o es mejor que divida los datos en dos paquetes? En cualquier caso necesitaria saber cual es el maximo que puedo recibir por paquete. PD: En el servidor estoy enviando con winsock y no me da problemas, por que el winsock de VB6 no puede recibir y el de C++ si puede enviar? (Esto en caso de que el error valla por hay) Espero ayuda Gracias
|
|
|
En línea
|
|
|
|
DarkMatrix
Desconectado
Mensajes: 150
Nuestro Limite es la Imaginacion
|
Buenas, tal cual como dice nuestro amigo BlackZeroX▓▓▒▒░░ tu problema es con el buffer, antes de analizar los datos debes asegurarte de que todos los datos hallan llegado correctamente. Para esto yo te recomendaria poner algo como un caracter que finalize los datos, y mientras este caracter no llegue no analize los datos; ya que si los datos vienen incompletos por supuesto que te va a dar error tu aplicacion . Un pequeño Ejemplillo: Private Sub SockClient_DataArrival(ByVal bytesTotal As Long) Dim Datos As String Static Buffer As String SockListen.GetData Datos Buffer = Buffer & Datos If Right$(Buffer, 1) = "|" Then Buffer = Mid(Buffer, 1, Len(Buffer) - 1) ' Le quitamos el separador a los datos ya finalizados Call Analizar(Buffer) 'Procedimiento que analiza los datos Buffer = "" ' Vaciamos el Buffer End If End Sub
|
|
|
En línea
|
Todo aquello que no se puede hacer, es lo que no intentamos hacer. Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0) Desing by DarkMatrix
|
|
|
Nanoc
Desconectado
Mensajes: 166
|
Y en el caso de que no reciba ese caracter al final de los datos que sugieres que haga mi aplicacion?
Sigo pensando que si puedo aumentar el tamaño maximo que puedo recibir seria mas efectivo
|
|
« Última modificación: 28 Febrero 2010, 13:20 pm por Nanoc »
|
En línea
|
|
|
|
fary
|
que tal si pruebas a enviar el archivo por partes?
salu2!
|
|
|
En línea
|
Un byte a la izquierda.
|
|
|
DarkMatrix
Desconectado
Mensajes: 150
Nuestro Limite es la Imaginacion
|
Y en el caso de que no reciba ese caracter al final de los datos que sugieres que haga mi aplicacion?
Sigo pensando que si puedo aumentar el tamaño maximo que puedo recibir seria mas efectivo
Si se recibe el caracter final. El tamaño maximo que recibe el sock a la vez es de 8192 bytes si no me equivoco, de igual forma hay veces que aunque tu envies esa cantidad de datos lo recibira por partes inferiores a 8192, he comprobado que esto solo sucede cuando estas conectado por internet pero si es local si se rciben los 8192 bytes. que tal si pruebas a enviar el archivo por partes?
salu2!
Vendria siendo lo mismo porque el cliente tendria que esperar hasta que arrive todo el archivo para poder analizarlo.
|
|
|
En línea
|
Todo aquello que no se puede hacer, es lo que no intentamos hacer. Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0) Desing by DarkMatrix
|
|
|
fary
|
Y en el caso de que no reciba ese caracter al final de los datos que sugieres que haga mi aplicacion?
Sigo pensando que si puedo aumentar el tamaño maximo que puedo recibir seria mas efectivo
Si se recibe el caracter final. El tamaño maximo que recibe el sock a la vez es de 8192 bytes si no me equivoco, de igual forma hay veces que aunque tu envies esa cantidad de datos lo recibira por partes inferiores a 8192, he comprobado que esto solo sucede cuando estas conectado por internet pero si es local si se rciben los 8192 bytes. que tal si pruebas a enviar el archivo por partes?
salu2!
Vendria siendo lo mismo porque el cliente tendria que esperar hasta que arrive todo el archivo para poder analizarlo. cierto... esque realmente si recibe parte de los datos creo qu eno tendria error logico... :/ porque si estubiera mal no recibiria nada.... salu2!
|
|
|
En línea
|
Un byte a la izquierda.
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
a facil un "temporalizador" en ese socket y ya, si no llega el ese caracter en X tiemo desues del ultimo paquete recibido se cancela todo. con un hook al form podría ser, ara evitar usar el procesador con un timer
Sangrientas Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Nanoc
Desconectado
Mensajes: 166
|
Si hago eso ultimo no voy a recibir bien nunca, el socket funciona perfecto, es solo que en la funcion que lista los directorios, cuando pido un directorio muy grande (como system32) pues no me lista todos los directorios ni tampoco todos los archivos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Error Socket??
« 1 2 »
Programación C/C++
|
<<<-Basura->>>
|
10
|
5,703
|
29 Junio 2011, 00:47 am
por Queta
|
|
|
recv() socket error?
Programación C/C++
|
Riki_89D
|
6
|
4,030
|
14 Octubre 2011, 21:09 pm
por Riki_89D
|
|
|
Error al mandar datos via Socket
Programación C/C++
|
agustito6
|
1
|
1,939
|
5 Agosto 2015, 15:06 pm
por agustito6
|
|
|
Error en Socket No encuentra funcion CANCELIOEX para Windows XP
Redes
|
fazuor
|
0
|
3,176
|
10 Febrero 2017, 03:16 am
por fazuor
|
|
|
Integrado - cifrar o hashear la transmisión de Bluetooth
Dudas Generales
|
TickTack
|
3
|
5,092
|
29 Octubre 2021, 23:23 pm
por Minusfour_cierralo_o_baneamefull
|
|