A
Guten Morgen,
das mit dem Zettel am Anfang funktioniert doch ganz gut:
// client.cpp
char buf[250] = "Nachricht";
int bufSize = sizeof(buf);
char tmp[4];
memcpy(tmp, &bufSize, sizeof(bufSize));
rc = send(s, tmp, sizeof(tmp), 0); // 250
rc = send(s, buf, sizeof(buf), 0); // Nachricht
// server.cpp
int Socket::recvTCP(string &dest) {
char *buf = new char[maxReceive + 1]; // maxReceive = 5
memset(buf, 0, maxReceive + 1);
dest.clear();
int nRec;
// get length
nRec = ::recv(sock, buf, 4, 0);
int bytesLeft;
memcpy(&bytesLeft, buf, 4); // 250
while(bytesLeft > 0) {
nRec = ::recv(sock, buf, maxReceive, 0);
buf[nRec] = '\0'; // Kann ich mir eigentlich sparen?
dest += buf;
bytesLeft -= nRec;
}
delete [] buf;
return true;
}
Das funktioniert so auch ersteinmal ganz gut.
Schwierig wird es nur, wenn der Client nicht die Längenangabe mitverschickt. Dann werden die ersten 4 Zeichen ja als Länge ausgewertet? Sollte man da noch so etwas wie eine 2-Byte-Prüfsumme dranhängen oder verschicke ich damit dann zu viel "Müll"?