返回首页

亲爱的,

我面临probelm,为了在mutithreaded Windows程序服务器提供每个客户不同的线程来处理数据,从多个客户端。

probem这里是服务器始终在新创建的线程(客户端)读取(接收)数据,客户THA irespective已发送的消息......

在一个场景中,其中有服务器,CLIENT1客户2和客户端2近期已经加入。在这种情况下,客户端1服务器发送任何数据视为2从客户端发送数据在客户端2线程处理。

这将被appriciated帮助..

感谢在前进......| srikantpanda |查奥图尔:好吧,你有你的逻辑中的几个错误。这最大的一个,是你处理线程的参数传递new_fd地址。线程不*不*移动变量到一个更安全的地方,但继续使用它通过指针(即,* client_fd)。这意味着你继续访问实际变量在主服务器线程new_fd。当第二个客户端来,你覆盖new_fd第二客户端的套接字信息和创建第二个线程来处理。现在两个线程都指向相同的new_fd变量,它包含了第二个客户端的Socket,第一客户端的Socket正在丢失。

你需要在线程开始捕捉任何"多变"的参数。移动范围的线程本地变量。当然,这开辟了在这一个时间问题,而不太可能,它有可能为客户端连接到来得如此之快,您处理多个的,在主线程中创建的每个线程,但线程没有得到一个机会启动和捕获的"多变"的数据之前,主线程将覆盖它。由于"插座"是一个单一的"L-值",你可以把它传递给线程,而不是到Socket指针。这将消除L-值类型参数的时机问题。

最后,你有这个变量'X',你作为一个成一个线程ID数组的索引使用。 'X'10时开始,并存储每个条目后递减。然而仅仅是漫长的10阵列,所以你创建的第一个线程超过数组边界(0 .. 9)

回答