Winsock~创建UDP侦听器(多个vs 1套接字)

时间:2014-11-23 20:11:18

标签: c++ networking udp winsock winsock2

亲爱的Stackoverflowers,

我正在研究网络,我决定用Winsock创建一个小而简单的网络库。 (我正在使用完成端口和重叠IO)

当我研究了一下时,我为TCP侦听器做了以下步骤(如果我错了,请纠正我):

  1. 创建听力插座
  2. 将其绑定到端口/ IP
  3. 听取它
  4. 创建新连接时,请为该连接提供单独的套接字。
  5. 听众继续聆听,根据需要处理具体连接。
  6. 编辑:通过'连接'从这里我指的是服务器和不同客户之间的通信。

    虽然对于UDP侦听器,我们需要使用WSARecvFrom,它返回lpFrom参数的IP地址。现在我想知道以下内容:

    使用WSARecvFrom使一个UDP套接字监听特定端口上的传入连接并为每个特定连接创建新套接字是否更好?或者我可以将WS Socket本身与WSASendTo一起使用。如果一个UDP套接字用于例如1000个连接,是否会导致任何性能损失?或者为每个不同的传入连接创建/复制单独的套接字是否相同甚至更好?

    注意:如果需要多个套接字,您将如何处理在同一端口上侦听的套接字,或者客户端是否可以接受来自不同端口的UDP?

    希望你们能帮忙!

    聚苯乙烯。总是欢迎额外的提示!

1 个答案:

答案 0 :(得分:1)

与TCP不同,UDP是无连接的,因此您不需要为每一方创建单独的套接字。一个UDP套接字可以处理一切。将其绑定到本地IP /端口并调用WSARecvFrom()一次,当它向IOCP报告数据时,您可以根据需要处理数据(如果需要另一个线程),然后再次调用WSARecvFrom()。每次新数据到达时,您都必须查看报告的lpFrom地址以了解发件人的IP /端口。是的,您可以使用相同的UDP套接字在需要时向每个发件人发送数据。