我有一个服务器与多个客户端交互,客户端将消息发送到服务器,服务器通过recv()方法读取它们。我得到的问题是我使用waitforsingleobject(处理程序,10000毫秒),以使服务器等待几秒钟与一个客户端交互,然后让其他人访问它,但后来我开始看到服务器的答案与错误消息给客户端并被阻止。所以看起来像是同步问题。
所以我的问题是(因为我是c ++的初学者)我怎样才能确保收到每个传入的消息并将其回复给正确的客户端,允许所有客户端与服务器进行交互。
答案 0 :(得分:0)
有两种选择。
首先是一个非常标准的模型 - 每个客户端一个线程。当客户端连接时,您启动一个线程来处理它。
第二种方法不需要很多线程。您应该在重叠的套接字而不是recv()上使用WSARecv()。这样,您可以同时打开多个接收操作,每个客户端一个,并在WaitForMultipleObjects()中等待它们。具体来说,您将等待WSOAVERLAPPED内的事件。请记住,WaitForMultipleObjects()对等待对象的数量有限制。超出时,您将需要运行另一个线程。 WaitForMultipleObjects()的返回代码将告诉您哪个客户端已发送数据,因此您可以回复它。
或者,如上所述,您可以使用select()来确定哪个套接字有数据。