我正在为游戏编写UDP服务器。 你知道在一个端口上是否可以在UDP中使用多个套接字?或者我必须使用动态端口(一个插槽=一个端口)?
谢谢
答案 0 :(得分:2)
在一个UDP端口上创建多个套接字没有多大意义。 UDP不是像TCP那样的点2点协议,所以使用一个“服务器”套接字绑定到特定端口就可以处理数百个客户端。
答案 1 :(得分:0)
使用SO_REUSEADDR
SO_REUSEADDR套接字选项允许套接字强制绑定到a 另一个插座使用的端口。第二个套接字调用setsockopt optname参数设置为SO_REUSEADDR和optval参数集 在与同一端口调用bind之前,将布尔值设置为TRUE 原装插座。一旦第二个套接字成功绑定,就可以了 绑定到该端口的所有套接字的行为是不确定的。对于 例如,如果同一端口上的所有套接字都提供TCP服务, 通过端口的任何传入TCP连接请求都不能 保证由正确的套接字处理 - 行为是 非确定性。恶意程序可以使用SO_REUSEADDR 强制绑定已用于标准网络协议的套接字 服务以拒绝访问这些服务。没特别 使用此选项需要特权。
答案 2 :(得分:0)
如果通过setsockopt指定了SO_REUSEADDR,当然可以在一个端口上安装多个UDP套接字。 但是,我怀疑你真正需要的是使用一个UDP套接字与多个客户端通信,这也是可行的。 UDP不是面向连接的,像sendto和recvfrom这样的UDP API可以区分一个套接字上的不同对等体。