我在使用 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”,客户端打印 strlens ...
//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;
}
帮助将不胜感激^_^。