从单个客户端连接到多个服务器

时间:2011-10-14 13:18:22

标签: c++ tcp

我有10.000个小设备,那些有一个服务器端口(等待连接)。我想用一台服务器(PC)同时连接所有设备。我可以为每个设备打开端口吗? Windows有可能吗?日Thnx

3 个答案:

答案 0 :(得分:1)

阅读this page上的第4.8节。看起来答案是肯定的,原则上,你需要做异步IO,因为你不能同时在Windows上运行10000个线程。

答案 1 :(得分:0)

只要你使用了一个合理有效的轮询策略(例如I / O完成端口,如果你使用的是Windows)并且保持内核套接字缓冲区相当小,原则上它是可能的。但是,如果可靠性不是一个大问题,并且您可以控制协议的两端(即,您正在设计设备),UDP将更加高效 - 使用UDP,您可以使用单个套接字从所有设备读取。

如果要求TCP,则单个接口的绝对限制为60,000个,因为TCP端口号仅为16位,即64k个可能的值。最终你将耗尽本地端口号,除非你做了一些奇特的事情,比如为你的网络接口提供多个IP地址。

答案 2 :(得分:0)

实际执行此操作的方法是让设备侦听特定的多播组。通过这种方式,您只需广播数据包,并且收听该组的机器(很可能)将收到该数据包。

这也可以使用多播地址将事物划分为多个组合。

请注意,有可能丢失数据包 - 因此,如果每条消息都很重要,我建议使用序列编号/恢复方法。