[Socket] recv() liest nicht mehr als 3 Byte am Stück

E

ExRevel

Routinier
Hi,

ich habe folgendes Problem in einem Clienten. Die Funktion recv() liest egal wieviele daten ich dem Client vom Server aus schicke maximal 3 byte am stück ein! Nun will ich gerade Dateinamen übertragen und die kommen dann immer zerhackt in 3-Buchstabenpäckchen an! Hier mal ein kleiner auszug:
Code:
void receive_dirlist(int sock){

	int bytes;
	char *buffer;

	while(bytes != 0){
	
		buffer = new char[20];

		bytes = recv(sock, buffer, sizeof(buffer) -1, 0);

		cout << "BYTES: " << bytes << endl;

		buffer[bytes] = '\0';
		
		cout << buffer << endl;
	
		delete[](buffer);
	}
}
Ich verzweifel hier gleich, ich hoffe irgendwer hatte mal genau solche Probleme :)

ciao Exi

PS:

Ich bin auch dof, hab grad selbst gesehen was sizeof(char)-1 ist! *grml* also theoretisch könnte man hier close!
 
Zuletzt bearbeitet:
Naja. Auch wenn es ein Fehler war kann recv unabhaengig der Anzahl von Bytes die du bereit bist zu speichern, beliebig viele Bytes zurueckgeben. Auch drei, oder zwei, oder nur ein byte je Aufruf. Mit dem erwarten von einer bestimmten Anzahl von bytes und diese dann mit recv erfuellt zu wissen, ist recht riskant.

unter posix ist es deshalb oft einfacher den socket in einen stream zu binden (fdopen) und dann fread zu benutzen, welche die angegebene Anzahl von bytes (ausnahme bei fehlern), auch zusichert.

mfg
 
Ok :)

Aber das Problem ist wirklich schon sehr lange her!

ciao
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

Problem mit Texteingabe

UDP empfangen bis keine Daten mehr kommen

freed liefert 0

wirre zeichen :(

Zurück
Oben