Socket empfängt nur 4 bytes



  • Hallo Leute.
    Ich bin neu hier im Forum und ich habe folgendes Problem. Wenn ich in meinem Programm, in dem ich eine Klasse für die Socketfunktionen und Variablen habe, also von der Main versuche char arrays an die Klassenfunktionen zu übergeben, um in den Arrays zu Speichern, verringert sich aus irgendeinem Grund immer die Größe der Arrays. Hier mal die relevanten Code abschnitte und die dazugehörige Ausgabe:

    [code]  //sendet die Daten zum Server
                 void SocketKlasse::sendData(char buf[]) {
                                     int bytes;
                                     bytes = send(s, buf, strlen(buf), 0);
                                     cout << " buf ind sendData hat die Größe: " << sizeof(buf) << endl;
                                     if (bytes == -1)
                                     {
                                     cout << "Es wurde nichts gesendet";
                                     }
                                     cout << "Es wurden" << bytes << "Bytes gesendet" << endl;
                 }
    
                 //empfängt Daten vom Server
                 void SocketKLasse::recvData(char* buf) {
                            int bytesGet;
                            cout << " Buf hat die Größe: " << sizeof(buf) << endl;
                            bytesGet = recv(s, buf, sizeof(buf) - 1, 0); //empfängt die Daten
                            buf[bytesGet] = '\0';
                            cout << sizeof(buf) << endl;
                            cout << "Bytes empfangen" << bytesGet << endl;
                            }
    };
    int main(int numberofArgs, char* pszArgs[]) {
    
        char request[] = "GET / HTTP/1.1\r\nHost: galad34.cwsurf.de\r\n\r\n";
    
        socket.sendData(request);
    
        char buf[10];
        cout << "In der main hat buf die größe: " << sizeof(buf) << endl;
        socket.recvData(buf);
    
        cout << buf << endl;         [/code]
    

    So und nun die dazugehörige Ausgabe:

    buf ind sendData hat die Gr÷▀e: 4
    Es wurden43Bytes gesendet
    In der main hat buf die gr÷▀e: 10
    Buf hat die Gr÷▀e: 4
    Bytes empfangen3
    HTT
    

    MFG Galad 🙂



  • Ist immer dasselbe - recv(..) muss in einer Schleife augerufen werden! recv(..) empfängt in einem Aufruf 1 bis maximal Buffer Grösse an Bytes! Man kann es nicht voraussagen wieviel.

    EDIT:
    Zusätzlich kommt hier noch ein anderes Fehler zum tragen. siezof(char*) ist 4 - das hat nichts mit deiner korrekten Buffergrösse zu tun. Du musst bei diesem Aufruf die Buffer Grösse separat übergeben oder gleich std::vector<char> verwenden.



  • es hat auch funktioniert, als ich die funktion direkt in der main aufgerufen habe. wie würde ich das denn mit der schleife machen und klappt das bei dir dann?

    EDIT: ich hatte deinen edit noch nciht gesehen. dieser ist aber korrekt und hat unser problem auch behoben. vielen danke:)



  • Galad34 schrieb:

    es hat auch funktioniert, als ich die funktion direkt in der main aufgerufen habe.

    Ja. sizeof kann bei lokal definierten Arrays verwendet werden. Nicht jedoch bei Pointern (ausser natürlich man will die Grösse des Pointers wissen).

    Das Schleifenproblem hat sich bei Dir zufällig nicht bemerkbar gemacht.

    Galad34 schrieb:

    wie würde ich das denn mit der schleife machen

    Du musst ein Protokoll haben - such mal nach Posts von mir bezüglich Sockets. Ich habe das hier schon so oft beschrieben...

    EDIT
    Hier wäre z.B. einer - der erste Post von mir:
    http://www.c-plusplus.net/forum/291001

    Galad34 schrieb:

    und klappt das bei dir dann?

    Wann? Wenn ich alles bemängelte ausgebessert habe? Keine Ahnung, ich werde den Code auch nicht ausprobieren...


Anmelden zum Antworten