相同的绑定端口UDP套接字和接收数据的全部
我需要做的一个重要考验。测试的条件如下。相同的绑定端口UDP套接字和接收数据的全部
我使用的是winsock,我有2个UDP套接字(Sock-A和Sock-B),它们都带有SO_REUSEADDR选项,它们都被绑定到一台PC上的端口1000。 两者都将UDP数据包传输到另一个套接字(Sock-C),而位于不同LAN中的Sock-C接收它们的消息。
袜子-C有一些消息回应他们,但不幸的是我能看到的只是袜子-A(已开越快)刚刚得到的消息,和袜子-B没有得到任何东西。当我关闭Sock-A时,我可以看到Sock-B开始接收消息。
任何人都知道我应该怎么做才能让双方袜子-A和袜子-B可以从袜子-C接收邮件?
谢谢〜
这是正常行为。我认为这不能通过在同一端口上侦听的2个套接字完成。
你为什么要结合2个插座到同一个端口?
对Linux来说,甚至会尝试均匀地分布在2个插座之间的数据包,所以它的随机。您将需要更改发送/接收数据包的方式。
当两个UDP套接字绑定到同一个端口,并且在该端口接收到一个传入的单播数据包时,它将被传递给其中一个两个插座(任意选择)。如果传入的数据包是一个多播UDP数据包OTOH,它将被传递到绑定到该端口的每个套接字。 (为了允许同一主机上的多个节目同时收听同一个多播组,需要后者的行为) –
好点。我没有包含它,因为op没有提到使用多播。 – rinn2883
谢谢你们,那我该如何处理这个问题呢?由于我通过互联网发送数据包,我可以使用多播模式发送数据包吗? –
是SO_REUSEADDR提供的WinSock?你检查setsockopt的返回值吗? https://msdn.microsoft.com/en-us/library/windows/desktop/ms740476(v=vs.85).aspx – Neil
为什么你使用相同的端口 - http://xyproblem.info/? –
是的,可以使用SO_REUSEADDR选项将相同的端口绑定到两个不同的套接字。 –