Socket Send Problem ??



  • Hallo Leute ich hoffe ihr könnt mir helfen.
    Ich habe folgendes Problem
    ich sende vom Client aus eine STruktor die wie folgt aussieht:

    message *msg = (message *) malloc(sizeof(message));
    	strcpy(msg.sz_message,"HALLO");
            msg->msg_opt = 100;
    	msg->recv_user_id = 1;
    	msg->send_user_id = 3;
    

    ich sende die dann wie folgt an meinen server

    send_message(&info,msg);
    

    Der Quellcode
    für die send_message sieht so aus

    int send_message(coninfo *info,message *msg)
    {
       long rc;
    
       rc = send(info->s,(char*)msg,sizeof(message),0);
    
      return rc;
    }
    

    auf dem Server empängt er zwar was aber füllt die Struktur nicht richtig ich mache das wie folgt

    message msg;
    recv(temp->get_socket(),(char *)&msg,sizeof(message),0);
    

    Weiss jemand wo der Fehler ist ich seh ihn nicht
    Und weiss nicht mehr weiter



  • recv öfter aufrufen



  • Das ist doch keine Idiale Idee. Erstens
    wie oft soll man den recv denn aufrufen bis das klappt???
    und zweitens ich dachte recv wartet sollange bis er etwas bekommt und dann
    würde die funktion die struktur füllen



  • /?????? schrieb:

    Das ist doch keine Idiale Idee. Erstens
    wie oft soll man den recv denn aufrufen bis das klappt???

    Du musst den Rückgabewert von recv überprüfen, und schauen ob schon die gesamt struktur gesendet wurde. Sobald alles gesendet wurde, biste fertig.

    mfg



  • wie oft soll man den recv denn aufrufen bis das klappt???

    solange bis du sizeof(message) Bytes zusammen hast.



  • recv liest soviele Zeichen, wie gerade im OS-internen Puffer stehen, und das kann eben alles oder nur ein Teil dessen sein, was du auf der anderen Seite gesendet hast.

    Da fehlt das Protokoll. Je nach Anwendungsfall kann das ganz verschieden sein. z.B. Telegramme mit immer gleicher (und auf Empfängerseite bekannter!) Größe. Oder du definierst einen Telegrammheader, wo die Anzahl der zu empfangenden Zeichen eingetragen werden.

    Rob'


Anmelden zum Antworten