带有c ++和windows API的udp套接字

时间:2012-01-12 22:11:17

标签: c++ multithreading udp winsock

我正在为游戏编写UDP服务器。 你知道在一个端口上是否可以在UDP中使用多个套接字?或者我必须使用动态端口(一个插槽=一个端口)?

谢谢

3 个答案:

答案 0 :(得分:2)

在一个UDP端口上创建多个套接字没有多大意义。 UDP不是像TCP那样的点2点协议,所以使用一个“服务器”套接字绑定到特定端口就可以处理数百个客户端。

答案 1 :(得分:0)

请参阅Using SO_REUSEADDR...

  

使用SO_REUSEADDR

     

SO_REUSEADDR套接字选项允许套接字强制绑定到a   另一个插座使用的端口。第二个套接字调用setsockopt   optname参数设置为SO_REUSEADDR和optval参数集   在与同一端口调用bind之前,将布尔值设置为TRUE   原装插座。一旦第二个套接字成功绑定,就可以了   绑定到该端口的所有套接字的行为是不确定的。对于   例如,如果同一端口上的所有套接字都提供TCP服务,   通过端口的任何传入TCP连接请求都不能   保证由正确的套接字处理 - 行为是   非确定性。恶意程序可以使用SO_REUSEADDR   强制绑定已用于标准网络协议的套接字   服务以拒绝访问这些服务。没特别   使用此选项需要特权。

奖金阅读:What exactly does SO_REUSEADDR do?

答案 2 :(得分:0)

如果通过setsockopt指定了SO_REUSEADDR,当然可以在一个端口上安装多个UDP套接字。 但是,我怀疑你真正需要的是使用一个UDP套接字与多个客户端通信,这也是可行的。 UDP不是面向连接的,像sendto和recvfrom这样的UDP API可以区分一个套接字上的不同对等体。