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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Imperfeccion en la transmisión con sockets de flujo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Imperfeccion en la transmisión con sockets de flujo.  (Leído 5,326 veces)
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Imperfeccion en la transmisión con sockets de flujo.
« 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.


« Última modificación: 4 Enero 2011, 14:19 pm por tuket » En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Imperfeccion en la transmisión con sockets de flujo.
« Respuesta #1 en: 4 Enero 2011, 16:35 pm »

Si pero podrias poner el code?


En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Imperfeccion en la transmisión con sockets de flujo.
« Respuesta #2 en: 4 Enero 2011, 20:07 pm »

Si, claro(aunque no creo que sea necesario):
1º:
Código
  1. #include<iostream>
  2. #include<string.h>
  3. #include<stdio.h>
  4. #include<sys/types.h>
  5. #include<winsock.h>
  6. #include<conio.h>
  7.  
  8. int main(){
  9.    {
  10.        WSADATA wsaData;   /* Si esto no funciona */
  11.        //WSAData wsaData; /* prueba esto en su lugar */
  12.  
  13.        if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)  
  14.        {
  15.            fprintf(stderr, "WSAStartup failed.\n");
  16.            exit(1);
  17.        }  
  18.    }
  19.    ///////////////////////////////////////////////////////////////////
  20.  
  21.  
  22.  
  23.  
  24.    struct sockaddr_in my_addr, they_addr;
  25.    SOCKET sockfd, newfd;
  26.    sockfd=socket(AF_INET,SOCK_STREAM,0);
  27.    if(sockfd==-1){
  28.           printf("error en socket");
  29.           std::cin.get();
  30.           exit(-1);
  31.           }
  32.  
  33.    my_addr.sin_family = AF_INET;        
  34.    my_addr.sin_port = htons(54332);      
  35.  
  36.    if(my_addr.sin_addr.s_addr = htonl(INADDR_ANY)==-1){
  37.            printf("error en ip\n");
  38.            std::cin.get();
  39.            exit(-1);
  40.            }
  41.    memset(&(my_addr.sin_zero), '\0', 8);
  42.  
  43.    if(bind(sockfd, (struct sockaddr *)&my_addr,  sizeof(struct sockaddr))==-1){
  44.        printf("error en bind()");
  45.        std::cout<<WSAGetLastError()<<std::endl;
  46.        std::cin.get();
  47.        exit(-1);
  48.    }
  49.    if(listen(sockfd, 10)==-1){
  50.        printf("error en listen()");
  51.        getch();
  52.        exit(-1);
  53.    }
  54.    int size_sockaddr=sizeof(sockaddr);
  55.    newfd=accept(sockfd,(struct sockaddr *)&they_addr, &size_sockaddr);
  56.    int bytes_sent;
  57.    //send(newfd, "hola", 5, 0);
  58.    do{bytes_sent=send(newfd, "hola", 5, 0);}
  59.    while (bytes_sent!=5);
  60.  
  61.    WSACleanup();
  62.    printf("todo en orden\n");
  63.    getchar();
  64. }

2º:

Código
  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<string.h>
  4. #include<arpa/inet.h>
  5. #include<sys/types.h>
  6. #include<netinet/in.h>
  7.  
  8. int main(){
  9. int sockfd;
  10. struct sockaddr_in dest_addr;
  11. sockfd=socket(AF_INET, SOCK_STREAM, 0);
  12. if(sockfd==-1){
  13.        printf("error en el socket");
  14.        std::cin.get();
  15.        return -1;
  16.        }
  17. dest_addr.sin_family=AF_INET;
  18. dest_addr.sin_port=htons(54332);
  19. dest_addr.sin_addr.s_addr=inet_addr("192.168.1.112");
  20. if(dest_addr.sin_addr.s_addr==-1){
  21.        printf("error en ip");
  22.        getchar();
  23.        return -1;
  24.        }
  25. memset(&(dest_addr.sin_zero),0, 8);
  26. if(connect(sockfd, (struct sockaddr*)&dest_addr, sizeof(struct sockaddr))==-1){
  27.        printf("error en conect");
  28.        getchar();
  29.        return -1;
  30. }
  31. char cadena[5];
  32. recv(sockfd, &cadena, 5, 0);
  33. cadena[4]=0;
  34. std::cout<<cadena<<std::endl;
  35. printf("todo en orden\n");
  36. }
« Última modificación: 4 Enero 2011, 20:11 pm por tuket » En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Imperfeccion en la transmisión con sockets de flujo.
« Respuesta #3 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
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Imperfeccion en la transmisión con sockets de flujo.
« Respuesta #4 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
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Imperfeccion en la transmisión con sockets de flujo.
« Respuesta #5 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...
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: Imperfeccion en la transmisión con sockets de flujo.
« Respuesta #6 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
  1. char buff[] = "hola";
  2. send(newfd, buff, 5, 0);
  3.  

Si tengo tiempo, luego pruebo los programas.

Saludos.
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Imperfeccion en la transmisión con sockets de flujo.
« Respuesta #7 en: 4 Enero 2011, 22:48 pm »

Podrias empezar mirando codes de sockets que hay en el foro de C/C++
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Imperfeccion en la transmisión con sockets de flujo.
« Respuesta #8 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.

Código
char buff[] = "hola";
send(newfd, buff, 5, 0);
 

Si tengo tiempo, luego pruebo los programas.

Saludos.
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.
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Imperfeccion en la transmisión con sockets de flujo.
« Respuesta #9 en: 4 Enero 2011, 23:04 pm »

http://foro.elhacker.net/ejercicios/ejercicios_en_c-t34911.0.html
Sockets
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda - velocidad de transmision
Multimedia
no_manzana 2 1,941 Último mensaje 17 Julio 2006, 00:31 am
por no_manzana
Transmision de archivos FLV por internet
Multimedia
johnwmartinez 1 2,934 Último mensaje 13 Noviembre 2008, 15:05 pm
por johnwmartinez
Potencia de transmision?
Materiales y equipos
Hacker wifi 4 6,934 Último mensaje 23 Julio 2010, 11:40 am
por Hacker wifi
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines