Título: Imperfeccion en la transmisión con sockets de flujo. Publicado por: lapras en 4 Enero 2011, 14:18 pm He hecho 2 programas de sockets en C++.
Consiste enviar la cadena "hola" desde un ordenador a otro y hacer que lo muestre en la pantalla del otro ordenador. Lo he conseguido hacer pero el problema es que el 80% de las veces los datos llegan corruptos. Esto me extraña por que según tengo yo entendido los sockets de flujo usan el protocolo TCP y en este protocolo es el mismo el que se encarga de que lleguen los resultados adecuadamente. ¿Por que sucede esto?¿Como se puede evitar? Datos: un ordenador es linux y el otro es windows. No estoy usando datagramas. Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: Garfield07 en 4 Enero 2011, 16:35 pm Si pero podrias poner el code?
Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: lapras en 4 Enero 2011, 20:07 pm Si, claro(aunque no creo que sea necesario):
1º: Código
2º: Código
Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: Garfield07 en 4 Enero 2011, 20:14 pm ¿Y por que no lo has puesto en el foro de C/C++?
PD: Luego miro el code que ahora voy a jugar un poquito :P Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: lapras en 4 Enero 2011, 20:33 pm Por que a pesar de estar escrito en C++ la duda no tiene que ver en absoluto con C++. Tiene que ver con la programación de sockets. xD
Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: Garfield07 en 4 Enero 2011, 22:29 pm Exactamente ::) Necesitaria ver el code para ver si tiene algo que lo provoque. Los sockets se acaban al compilar xD no tienen vuelta de hoja...
Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: Khronos14 en 4 Enero 2011, 22:42 pm Hola tuket, yo probaría a enviar los datos de esta forma para ver si es este el problema.
Código
Si tengo tiempo, luego pruebo los programas. Saludos. Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: Garfield07 en 4 Enero 2011, 22:48 pm Podrias empezar mirando codes de sockets que hay en el foro de C/C++
Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: lapras en 4 Enero 2011, 22:59 pm Hola, gracias por responder.
Citar Hola tuket, yo probaría a enviar los datos de esta forma para ver si es este el problema. Eso ya lo probé, pasa lo mismo: la gran mayoría de las veces los datos llegan corruptos. Yo intuyo que se debe de hacer alguna comprobación pero no se.Código char buff[] = "hola"; send(newfd, buff, 5, 0); Si tengo tiempo, luego pruebo los programas. Saludos. Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: Garfield07 en 4 Enero 2011, 23:04 pm http://foro.elhacker.net/ejercicios/ejercicios_en_c-t34911.0.html
Sockets Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: lapras en 4 Enero 2011, 23:28 pm Bueno. Ya que nadie entiende lo que se pregunta lo voy a repetir de otra manera.
Segun wikipedia: Citar TCP Lo que significa que si envió los datos por TCP tienen que llegar seguro correctamente.El protocolo garantiza que los datos serán entregados en su destino sin errores y en el mismo orden en que se transmitieron. Como dice esta pagina(http://www.fismat.umich.mx/mn1/manual/node24.html): Citar Socket de flujo SOCK_STREAM usa el protocolo TCP lo que significa que la cadena "hola" tiene que llegar por cojones al ordenador opuesto(de hecho en ocasiones si que llega).da un flujo de datos de dos vías, confiable, y sin duplicados sin límites de grabación. El flujo opera en forma parecida a una conversación telefónica. El tipo del socket es SOCK_STREAM, el cual en el dominio de Internet usa TCP (Transmission Control Protocol). Mi pregunta es: ¿Por que demonios no llega?¿Se debe a la recepción?¿Wikipedia miente?¿Hay interferencias?¿los extraterrestres están jodiéndome manipulando los datos? XD espero que ahora se entienda mejor PD: gracias por el link Sagrini pero no se a que viene eso. Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: Khronos14 en 5 Enero 2011, 00:05 am tuket, el protocolo TCP/IP no falla. Lo que falla son los programas, o el cliente o el servidor.
Saludos. Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: lapras en 5 Enero 2011, 00:10 am Es bueno saberlo :)
Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: ukol en 5 Enero 2011, 18:07 pm Te faltó cerrar el socket(closesocket/shutdown en wsock) quizá sea eso(código 1).
http://msdn.microsoft.com/en-us/library/bb530744%28v=VS.85%29.aspx (http://msdn.microsoft.com/en-us/library/bb530744%28v=VS.85%29.aspx) Edito: Por cierto, en el segundo código no miras si da error, si devuelve -1 miras el errno con strerror(errno) y te hubiera dado mas información de lo que pasa. Que lo sepas pa la próxima, en windows no se como se hace pero seguro hay forma. Título: Re: Imperfeccion en la transmisión con sockets de flujo. Publicado por: lapras en 5 Enero 2011, 19:43 pm Nada ya esta solucionado dejo el código cambiado por si a alguien le interesa:
Código
|