Sockets: Empfangen einer unbekannten Anzahl von Bytes



  • Hi,

    der Receive-Aufruf an einem Socket schaut ja so aus:

    char buffer[1024];
    int bytesRead = recv (socket, buffer, 1024, 0);
    

    Kann ich die Puffergröße auch irgendwie dynamisch gestalten oder muss ich blockweise lesen, falls größere Datenmengen anstehen, etwa so:

    do {
      int bytesRead = recv (socket, buffer, 1024, 0);
      appendToAnotherBuffer(buffer);
    } while (bytesRead==1024)
    

    ?

    Gruß, Thomas



  • verstehe deine frage nicht. dann erzeug halt einen den puffer dynamisch und übergib ihn recv. wo ist das problem?



  • Thomas++ schrieb:

    Kann ich die Puffergröße auch irgendwie dynamisch gestalten oder muss ich blockweise lesen, falls größere Datenmengen anstehen, etwa so:

    do {
      int bytesRead = recv (socket, buffer, 1024, 0);
      appendToAnotherBuffer(buffer);
    } while (bytesRead==1024)
    

    ungefähr so, aber du darfst nicht einfach aufhören wenn du mal weniger als 1024 bytes bekommen hast, sondern erst wenn recv() SOCKET_ERROR oder 0 zurückgibt.



  • unreg schrieb:

    verstehe deine frage nicht. dann erzeug halt einen den puffer dynamisch und übergib ihn recv. wo ist das problem?

    Wie schaut der Code denn aus? Ich muss doch die Größe eines Arrays bei der Implementierung festlegen.

    Überarbeitet:

    char data[10];
    	int bytesRead;
    	CString output;
    
    	while(true)
    	{
    		bytesRead = recv(serverSocket, (char*)&data, strlen(data), 0);
    		if (bytesRead == 0 || bytesRead == SOCKET_ERROR)
    			break;
    		output.Format(L"Received %d Byte(s): %s\n", bytesRead, CString(data));
    		wprintf(output);
    	}
    


  • Kennst du malloc oder new[]?



  • fraage schrieb:

    Kennst du malloc oder new[]?

    Habe Mitleid, ich komme aus der Java-Welt! 😉



  • Thomas++ schrieb:

    fraage schrieb:

    Kennst du malloc oder new[]?

    Habe Mitleid, ich komme aus der Java-Welt! 😉

    es gibt wohl keinen java-programmierer auf der ganzen welt der kein 'new' kennt 😉
    aber davon mal abgesehen: ob du einen dynamischen buffer oder ein statisches array benutzt, ist doch für deinen fall egal, oder?



  • net schrieb:

    Thomas++ schrieb:

    fraage schrieb:

    Kennst du malloc oder new[]?

    Habe Mitleid, ich komme aus der Java-Welt! 😉

    es gibt wohl keinen java-programmierer auf der ganzen welt der kein 'new' kennt 😉

    Das bezog sich auch eher auf das Allokieren von Speicher. 😉

    aber davon mal abgesehen: ob du einen dynamischen buffer oder ein statisches array benutzt, ist doch für deinen fall egal, oder?

    Scheint mir inzwischen auch so. Egal, wie lang ich den Puffer mache, es werden sowieso immer nur 3 Byte pro Zyklus übertragen. 😕



  • Ja, weil an der Stelle das strlen() auch falsch ist 😉 (strlen() funktioniert nur mit korrekt initialisierten C-Strings, nicht mit willkürlich gefüllten (aka. nicht initialisierte) char-Arrays).



  • CStoll schrieb:

    Ja, weil an der Stelle das strlen() auch falsch ist 😉 (strlen() funktioniert nur mit korrekt initialisierten C-Strings, nicht mit willkürlich gefüllten (aka. nicht initialisierte) char-Arrays).

    Danke. Hab ich auch gerade gemerkt. Mit sizeof() scheints zu funktionieren.


Anmelden zum Antworten