Winsock2ラッパークラス(クライアントサーバー)で問題が発生し、数え切れないほどの混乱の中で頭を悩ませた後、あなたの意見を聞いた方がよいと判断しました。
具体的には、Send()関数を使用するたびに、クライアントとサーバーの両方(常にではありません!)が1バイトまたは2バイト余分に送信するという問題があります。
たとえば、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;
}
助けていただければ幸いです^_^。