私は単純なサーバークライアントアプリケーションを作成しようとしています.これは、クライアントがサーバーに接続し、サーバーがメッセージを待ち、クライアントがユーザーからの入力を受け取り、それをサーバーに送信することだけです. サーバーはこのメッセージを受信し、それをクライアントに送り返します。クライアントはメッセージを出力し、ループして最初からやり直します。ただし、何らかの理由で、かなり奇妙な問題があります。最初のメッセージを送信すると、サーバーが応答し、2 番目のメッセージを送信すると、サーバーが最初のメッセージで再度応答します。3 番目のメッセージを送信すると、サーバーは 2 番目のメッセージなどで応答します。
接続を処理するサーバー コードは次のとおりです。
class themusers {
char ReMessage[200],SeMessage[200];
public:
void * HandleConnections(SOCKET connector,int location) {
std::string Converter;
for (;;) {
if (recv(connector,ReMessage,sizeof(ReMessage),NULL) == -1)
std::cout << "Disconnected." << std::endl;
discon.lock();
sock_connection[location] = NULL;
discon.unlock();
break;
}
else {
//this is the code that handles the receive/send operation
msgmut.lock();
//std:: cout << ReMessage << std::endl;
memcpy(SeMessage, ReMessage, sizeof(ReMessage));
send(connector, SeMessage, sizeof(SeMessage), NULL);
msgmut.unlock();
}
}
return NULL;
}
};
そして、これは私のクライアントコードです:
for (;;) {
cin >> tell;
send(sock, tell, sizeof(tell), NULL);
recv(sock,Message,sizeof(Message),NULL);
Converter = Message;
cout << "Server: " << Converter << endl;
}