目前我正在用 C++ 创建一个客户端服务器控制台应用程序。通过使用winsock2.h
库和 UDP 协议,我们使用sendto
andrecvfrom
将消息作为字符串从客户端发送到服务器,然后服务器将消息发送到不同的客户端,现在如果客户端 1 向客户端 2 发送消息,客户端 2 将不会收到消息,直到他们尝试向 client1 发送消息。我希望让程序像即时通讯工具一样工作,这样当客户端 1 向客户端 2 发送消息时,客户端 2 几乎会立即收到它,而无需先发送消息。
此外,如果客户端 1 向客户端 2 发送消息,客户端 1 将无法发送另一条消息,除非客户端 2 已回复第一个消息。
如果您需要更多信息或查看一些代码,请询问。
发送代码:
while( getline( cin, line ) )
{
// send a string to the server.
sendto( hSocket, line.c_str(), line.size(), 0,
reinterpret_cast<sockaddr*>( &serverAddress ),
sizeof( serverAddress ) );
// recieve the response.
int n = recvfrom( hSocket, recvLine, MAXLINE, 0, NULL, NULL );
if( n == -1 )
{
cout << "no reply" << endl;
}
else
{
recvLine[n] = 0;
string const terminateMsg = "server exit";
string msg = recvLine;
if( msg == terminateMsg )
{
cout << "Server terminated" << endl;
break;
}
cout << n << ": " << recvLine << endl;
}
}