elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Error de transmision por socket
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Error de transmision por socket  (Leído 8,383 veces)
Nanoc

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Error de transmision por socket
« en: 28 Febrero 2010, 01:01 am »

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 Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Error de transmision por socket
« Respuesta #1 en: 28 Febrero 2010, 02:28 am »

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 Desconectado

Mensajes: 166


Ver Perfil
Re: Error de transmision por socket
« Respuesta #2 en: 28 Febrero 2010, 02:56 am »

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
Código:
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 Desconectado

Mensajes: 150


Nuestro Limite es la Imaginacion


Ver Perfil WWW
Re: Error de transmision por socket
« Respuesta #3 en: 28 Febrero 2010, 07:27 am »

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 :P.

Un pequeño Ejemplillo:

Código
  1. Private Sub SockClient_DataArrival(ByVal bytesTotal As Long)  
  2.    Dim Datos As String
  3.    Static Buffer As String
  4.  
  5.    SockListen.GetData Datos  
  6.  
  7.    Buffer = Buffer & Datos  
  8.  
  9.    If Right$(Buffer, 1) = "|" Then
  10.        Buffer = Mid(Buffer, 1, Len(Buffer) - 1) ' Le quitamos el separador a los datos ya finalizados  
  11.        Call Analizar(Buffer) 'Procedimiento que analiza los datos
  12.        Buffer = "" ' Vaciamos el Buffer
  13.    End If
  14.  
  15. 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 Desconectado

Mensajes: 166


Ver Perfil
Re: Error de transmision por socket
« Respuesta #4 en: 28 Febrero 2010, 12:12 pm »

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


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Error de transmision por socket
« Respuesta #5 en: 28 Febrero 2010, 13:41 pm »

que tal si pruebas a enviar el archivo por partes?

salu2!
En línea

Un byte a la izquierda.
DarkMatrix

Desconectado Desconectado

Mensajes: 150


Nuestro Limite es la Imaginacion


Ver Perfil WWW
Re: Error de transmision por socket
« Respuesta #6 en: 28 Febrero 2010, 19:05 pm »

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


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Error de transmision por socket
« Respuesta #7 en: 28 Febrero 2010, 19:15 pm »

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 Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Error de transmision por socket
« Respuesta #8 en: 28 Febrero 2010, 20:25 pm »

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 Desconectado

Mensajes: 166


Ver Perfil
Re: Error de transmision por socket
« Respuesta #9 en: 28 Febrero 2010, 23:40 pm »

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

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error Socket?? « 1 2 »
Programación C/C++
<<<-Basura->>> 10 5,131 Último mensaje 29 Junio 2011, 00:47 am
por Queta
recv() socket error?
Programación C/C++
Riki_89D 6 3,709 Último mensaje 14 Octubre 2011, 21:09 pm
por Riki_89D
Error al mandar datos via Socket
Programación C/C++
agustito6 1 1,680 Último mensaje 5 Agosto 2015, 15:06 pm
por agustito6
Error en Socket No encuentra funcion CANCELIOEX para Windows XP
Redes
fazuor 0 2,903 Último mensaje 10 Febrero 2017, 03:16 am
por fazuor
Integrado - cifrar o hashear la transmisión de Bluetooth
Dudas Generales
TickTack 3 4,586 Último mensaje 29 Octubre 2021, 23:23 pm
por Minusfour_cierralo_o_baneamefull
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines