Winsocks char Array kommt teils fehlerhaft an
-
Hallo ich habe ein Problem, dass wenn ich über Winsocks ein char array verschicken möchte einige Daten fehlerhaft ankommen...
Client:
#define DEFAULT_BUFLEN 512 char recvbuf[DEFAULT_BUFLEN]; int iResult; int recvbuflen = DEFAULT_BUFLEN; [...] do { iResult = recv(ConnectSocket,recvbuf, recvbuflen, 0); if ( iResult > 0 ) { printf("Bytes received: %s\n", recvbuf); // Send an initial buffer iResult = send( ConnectSocket, hWID, strlen(hWID), 0 ); if (iResult == SOCKET_ERROR) { printf("send failed with error: %d\n", WSAGetLastError()); closesocket(ConnectSocket); WSACleanup(); return 1; } [...]
Server:
do { char SessionID[8]; gen_random(SessionID,8); // Echo the buffer back to the sender iSendResult = send( ClientSocket, SessionID, sizeof(SessionID), 0 ); if (iSendResult == SOCKET_ERROR) { printf("send failed with error: %s\n", SessionID); closesocket(ClientSocket); WSACleanup(); return 1; } printf("Bytes sent: %d\nData sent: %s\n", iSendResult, SessionID); } while (iResult > 0);
Hier ein Bild von dem Ergebniss.
http://uppix.net/c/1/0/4e906027acdae1c54ce925aa79ce0.png
-
lawl
-
derp schrieb:
lawl
Danke für den hilfreichen Beitrag.
-
Knebelkopf schrieb:
Hallo ich habe ein Problem, dass wenn ich über Winsocks ein char array verschicken möchte einige Daten fehlerhaft ankommen...
Client:
#define DEFAULT_BUFLEN 512 char recvbuf[DEFAULT_BUFLEN]; int iResult; int recvbuflen = DEFAULT_BUFLEN; [...] do { iResult = recv(ConnectSocket,recvbuf, recvbuflen, 0); if ( iResult > 0 ) { printf("Bytes received: %s\n", recvbuf); // Send an initial buffer iResult = send( ConnectSocket, hWID, strlen(hWID), 0 ); if (iResult == SOCKET_ERROR) { printf("send failed with error: %d\n", WSAGetLastError()); closesocket(ConnectSocket); WSACleanup(); return 1; } [...]
Server:
do { char SessionID[8]; gen_random(SessionID,8); // Echo the buffer back to the sender iSendResult = send( ClientSocket, SessionID, sizeof(SessionID), 0 ); if (iSendResult == SOCKET_ERROR) { printf("send failed with error: %s\n", SessionID); closesocket(ClientSocket); WSACleanup(); return 1; } printf("Bytes sent: %d\nData sent: %s\n", iSendResult, SessionID); } while (iResult > 0);
Hier ein Bild von dem Ergebniss.
http://uppix.net/c/1/0/4e906027acdae1c54ce925aa79ce0.pngBei recv() ist nicht garantiert das alles auf einmal empfangen wurde... du musst recv() in einer schliefe ausführen bis du alles hast, und aufpassen das du den Daten Puffer nicht überschreibst.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740121(v=vs.85).aspx
Auserdem solltest du den Code nochmal überdenken! Aber das war ja nicht gefragt...
-
Vielen Danke lowbyte,
Ich finde es echt toll wie schnell einem hier geholfen wird
Werde mir am besten das gesamte Thema Winsocks allgemein anschauen.
Tut mir echt Leid für die überflüssige Frage, beim nächsten mal denke ich selbst vorher besser nach, versprochen.
-