Autor
|
Tema: Problema con Sockets (Leído 3,383 veces)
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
Hola!, estoy haciendo un programa que redirecciona el tráfico que le llega de un puerto hacia otro, tiene como fin hacer accesibles todas las máquinas de una lan usando como "router" a una que previamente se le han abierto los puertos en el router real. Use getdata pero me daba muchos errores, habian muchos paquetes perdidos y los datos en si son imposibles de interpretar. Cambie getdata por peekdata y mejoró muchisimo, pero solo a nivel localhost. Osea:
Caso winsock.GetData:
localhost---->Redireccionador(Localhost)----->192.168.1.1
Se perdían muchos paquetes.
Caso winsock.PeekData:
localhost---->Redireccionador(Localhost)----->192.168.1.1
Casi perfecto, el 80% de las veces no se perdían paquetes.
Aca viene el problema:
Usando winsock.PeekData:
localhost---->Redireccionador(Otra PC LAN)----->192.168.1.1
La cantidad de paquetes perdidos era increible.
Usando winsock.PeekData:
localhost---->Redireccionador(Otra PC LAN)---->www.yahoo.com.ar
Se perdían tantos paquetes que no recibía bien la request y tampoco se recibía la respuesta de yahoo.com.ar (Bad Request).
Ahora, mis pregunta es la siguiente: Hay alguna manera de esperar a que los datos se hayan enviado/recibido, antes de tratar de enviar/recibir otra tanda de datos nueva?.
Saludos!!
|
|
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
Alguien que me pueda dar una respuesta??
|
|
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
LeandroA
|
hola no se bien como estas haciendo las cosas, pero creo que lo que vos buscas es el evento winsock1_SendComplete , yo lo que ago a menudo es poner una variable tipo boolean en el general y cuando se da este evento la paso a true entonces sigo enviando los paquetes, para el caso de recivir los datos si trabajas con html se supone que recives los paquetes completos justo cuando se cierra la conexion.
es algo asi lo que preguntas?
bueno , nose, te comento si estas trabajando con array de conexiones, yo tuve y tengo mala experiencia con este tema, no se si sea un problema de el winsock.ocx o visual b o mio. pero si intento enviar datos al mismo tiempo con mas de una conexion no jala como deberia.
Saludos
|
|
|
En línea
|
|
|
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
El send anda bien, el problema es el receive. Alguna otra sugerencia???
|
|
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
MazarD
|
Debes tener en cuenta que puedes hacer un send del tamaño que te dé la gana pero en la otra parte los datos completos enviados lo vas a recibir en varios eventos data_arryval (o como se escriba) distintos. Imagino que lo que haces es un tal.getdata buff tal2.senddata buff Entonces en getdata solo has recibido una parte y por lo tanto solo envias una parte del paquete.
No recuerdo muy bien los eventos de winsock en vb pero sin usar ninguno de ellos lo que puedes hacer es en cada send enviar el tamaño total de los datos que se pretenden enviar y en el getdata ir acumulando todo en un buffer hasta llegar a este tamaño antes de hacer el send a la parte final.
Espero haberte entendido y aclarado algo.
Saludos.
|
|
|
En línea
|
-Learn as if you were to live forever, live as if you were to die tomorrow- http://www.mazard.infoirc://irc.freenode.org/elhacker.net
|
|
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
Es buena esa, cuando tenga tiempo lo pruebo. Mil Gracias PD: Probado no anda, el tema es que eso no lo puedo hacer, ya que el paquete no lo manda un programa hecho por mi, sino un servidor http en este caso.
|
|
« Última modificación: 4 Octubre 2007, 05:20 am por APOKLIPTICO »
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
Ferсhu
Desconectado
Mensajes: 1.215
Menos palabras y Mas codigos.
|
winsock1_SendComplete, Es solo un evento q se activa cuando todo se envio, en control winsock no sabe si se perdieron o no paketes, solo activa el evento cuando termino de enviar todo. Para mi el control de winsock no es muy confiable con paketes Tcp, me parece ami. Udp en una red va bien. localhost---->Redireccionador(Localhost)----->192.168.1.1 usas 2 winsock o el mismo?? tmb creo q podes hacer tambytes=winsock.getdata buffer, y cuando no llega el tamaño maximo te das cuenta por tambytes, entonces armas el buffer y lo envias entero, pero nose como haces si mandas a medida q llegan o esperas a recibir todo y envias un pakete entero.
|
|
|
En línea
|
|
|
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
Private Sub Ws_DataArrival(ByVal bytesTotal As Long) 'On Error Resume Next Dim data Ws.GetData data data = StrConv(data, vbUnicode) Do Until ws1.State = 7 Or ws1.State = 9 DoEvents Loop ws1.SendData data End Sub Private Sub ws1_DataArrival(ByVal bytesTotal As Long) 'On Error Resume Next Dim data ws1.PeekData data data = StrConv(data, vbUnicode) Ws.SendData data End Sub
De esto se trata
|
|
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
Ferсhu
Desconectado
Mensajes: 1.215
Menos palabras y Mas codigos.
|
data = StrConv(data, vbUnicode) No entiendo para q esto si vb ya trabaja con unicode. Do Until ws1.State = 7 Or ws1.State = 9 DoEvents Loop ws1.SendData data Podrias probar de poner ws1.SendData, en el evento Ws_SendComplete, ademas es mas simple. data podrias explicitar q es string, sino creo q lo toma como variant, si no recuerdo mal
|
|
|
En línea
|
|
|
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
Si, es verdad todo lo que decis pero el problema no esta ahi... Alguna otra sugerencia? Salu2
|
|
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Problema] Conexión Sockets
Programación C/C++
|
farresito
|
7
|
4,502
|
5 Abril 2011, 23:01 pm
por poitier
|
|
|
Problema con Sockets vb.net
.NET (C#, VB.NET, ASP)
|
CH4ØZ
|
4
|
2,989
|
29 Julio 2011, 21:50 pm
por CH4ØZ
|
|
|
Problema con sockets WinSock2
« 1 2 »
Programación C/C++
|
Riki_89D
|
19
|
8,365
|
27 Septiembre 2011, 19:52 pm
por naderST
|
|
|
Problema sockets entre xp y w7
Programación C/C++
|
d00ze13
|
1
|
2,254
|
16 Noviembre 2011, 15:25 pm
por Eternal Idol
|
|
|
PROBLEMA con SOCKETS y GUI
Java
|
reylagarto19
|
1
|
1,732
|
31 Julio 2012, 22:01 pm
por reylagarto19
|
|