我正在写UDP服务器/客户端应用程序。
我希望我的单个服务器一次能够处理40个客户端。为此,我想创建40个专用线程,每个线程专用于一个客户端。由于每个客户端有40个线程,我想创建40个专用套接字。
但问题是:
我不知道我将绑定的40个IP地址是什么()我的套接字。 (因为就我而言,我必须将()绑定到我的服务器的IP地址。)通常,当只有一个套接字时,我将bind()绑定到"INADDR_ANY"
。
但是我应该绑定()每个40个套接字的IP地址应该是什么? 请帮我。任何评论/帮助表示赞赏。
答案 0 :(得分:2)
bind
只需要本地地址,而不是远程地址。
如果您希望每个客户端都有一个套接字,那么您需要为每个客户端使用不同的端口(使用bind
)。这样,每个客户端都可以将其流量发送到专用端口,并且每个套接字/端口都可以有一个线程。
虽然只有一个套接字(和一个端口)可能是个更好的主意,并且代码中有逻辑可以根据远程地址(使用recvfrom
检索)将流量分配给线程。例如。 / p>
答案 1 :(得分:2)
使用UDP执行此操作的一种常见方法是:
您将使用getpeername()调用来学习远程地址。
请记住,UDP是无连接的,你需要一些方法来表示你的套接字结束或超时。
答案 2 :(得分:1)
答案 3 :(得分:1)
在专用侦听线程中创建一个侦听套接字。
当收到新数据包时,请使用数据包的远程地址/端口,或在数据包有效负载中添加唯一的clientID,以唯一标识客户端。
为该客户端创建一个新线程(如果尚不存在),将该数据包传递给该线程进行进一步处理,然后返回监听。
如果给定的客户端线程暂时没有收到任何数据包,它可以自行终止。