0

我有一个服务器与多个客户端交互,其中客户端向服务器发送消息,服务器通过 recv() 方法读取它们。我遇到的问题是,我使用 waitforsingleobject(handler, 10000 毫秒) 来让服务器等待几秒钟与一个客户端交互,然后让其他人访问它,但随后我开始从服务器看到错误的答案向客户端发送消息并被阻止。所以看起来像一个同步问题。

所以我的问题是(因为我是 C++ 的初学者)我如何确保接收到每条传入消息并回复到正确的客户端,从而允许所有客户端与服务器交互。

4

1 回答 1

0

有两种选择。

首先是一个非常标准的模型——每个客户端一个线程。当客户端连接时,您启动一​​个线程来处理它。

第二种方法不需要很多线程。您应该在重叠的套接字上使用 WSARecv() 而不是 recv()。这样,您可以同时打开多个接收操作,每个客户端一个,并在 WaitForMultipleObjects() 中等待它们。具体来说,您将等待 WSAOVERLAPPED 中的事件。请记住,WaitForMultipleObjects() 对等待对象的数量有限制。超过时,您将需要运行另一个线程。WaitForMultipleObjects() 的返回码会告诉你哪个客户端发送了数据,所以你可以回复它。

或者,如上所述,您可以使用 select() 来确定哪个套接字有数据。

于 2013-02-19T08:22:41.817 回答