У меня проблемы с классами-оболочками Winsock2 (клиент-сервер), и после бесчисленных часов бессмысленной путаницы я решил, что было бы лучше, если бы я спросил ваше мнение.
Если говорить точнее, проблема в том, что каждый раз, когда я использую функцию Send (), и клиент, и сервер (не всегда!) Отправляют один или два дополнительных байта!
Например, я использую SendBytes («Hello»), а функция Recv возвращает «Hello •» с «•» или другими случайными символами в конце массива символов.
//main.cpp (Client)
#include "Socket.h"
int main()
{
NetworkService::Client cService = NetworkService::Client();
int res = cService.Initialize("127.0.0.1","20248");
if(res == 0){
int local = cService.SendBytes("Hello!");
printf("Bytes Sent: %ld\n", local);
cService.Shutdown();
char* temp = cService.Recv();
printf("String Recieved: %s - Size: %d",temp,strlen(temp));
printf("\nSTRLEN: %d",strlen("X5"));
}
else{
cService.Clean();
}
cService.Close();
while(!kbhit());
return 0;
}
Конечно, сервер отправляет строку "X5", а клиент печатает стрельцы ...
//The result with "X5" as the dummy text:
String Recieved: X5? - Size: 3 //Notice the extra '?' character
STRLEN: 2
Отправить // Получить функции
int NetworkService::Client::SendBytes(char* lData){
int local = send( ConnectSocket, lData, (int)strlen(lData), 0 );
if (local == SOCKET_ERROR) {
Close();
return WSAGetLastError();
}
return local;
}
char* NetworkService::Client::Recv(){
recv(ConnectSocket, recvbuf , recvbuflen, 0);
return recvbuf;
}
Помощь будет оценена ^ _ ^.