Socket Programmierung (TCP Client)



  • Hallo liebe Forum Mitglieder,

    ich arbeite gerade an einer Ethernetkommunikation zwischen einem Server und Client. Server seite steht bereits vom Kollegen.

    Ich möchte jetzt eine Kommunikation zwischen Server und Client schaffen.

    Habe dazu folgenden Code verwendet:

    /* tcpclient.c */
    
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    
    int main()
    
    {
    
            int sock, bytes_recieved;  
            char send_data[1024],recv_data[1024];
            struct hostent *host;
            struct sockaddr_in server_addr;  
    
            host = gethostbyname("127.0.0.1");
    
            if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
                perror("Socket");
                exit(1);
            }
    
            server_addr.sin_family = AF_INET;     
            server_addr.sin_port = htons(5000);   
            server_addr.sin_addr = *((struct in_addr *)host->h_addr);
            bzero(&(server_addr.sin_zero),8); 
    
            if (connect(sock, (struct sockaddr *)&server_addr,
                        sizeof(struct sockaddr)) == -1) 
            {
                perror("Connect");
                exit(1);
            }
    
            while(1)
            {
    
              bytes_recieved=recv(sock,recv_data,1024,0);
              recv_data[bytes_recieved] = '\0';
    
              if (strcmp(recv_data , "q") == 0 || strcmp(recv_data , "Q") == 0)
              {
               close(sock);
               break;
              }
    
              else
               printf("\nRecieved data = %s " , recv_data);
    
               printf("\nSEND (q or Q to quit) : ");
               gets(send_data);
    
              if (strcmp(send_data , "q") != 0 && strcmp(send_data , "Q") != 0)
               send(sock,send_data,strlen(send_data), 0); 
    
              else
              {
               send(sock,send_data,strlen(send_data), 0);   
               close(sock);
               break;
              }
    
            }   
    return 0;
    }
    

    Damit ich mit dem Server kommunizieren kann (bzw. die gewünschten Daten erhalte) müsste ich einen Paket mit "Alive" einen weiteren Paket mit "Version" senden... Danach sendet der Server auf jeden Request Daten zu...

    Ich möchte wissen wie ich das bewerstellige ? Ich habe leider keine Idee... Ob
    ich da Hexwerte sende, Dezimal oder was auch immer ?!? Würde gerne halt
    wissen vorallem wo ich das reinschreibe und wie das aussheen könnte!

    Hilfreiche unsterstüzung würde mich sehr freuen!

    lg

    Janine



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hi, ich hab zwar meine Unterlagen grad nicht hier, aber auf den ersten Blick vermute ich, dass Dein Programm bei recv hängen bleibt, wenn keine Eingabe kommt. Du solltest einen Timeout einfügen und zuerst prüfen, ob es überhaupt etwas auf dem Socket zu lesen gibt.

    Schau mal, was Du zu "select" und "FD_SET" findest.


Log in to reply