2017-04-19 73 views
0

我需要做的一个重要考验。测试的条件如下。相同的绑定端口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接收邮件?

谢谢〜

+0

是SO_REUSEADDR提供的WinSock?你检查setsockopt的返回值吗? https://msdn.microsoft.com/en-us/library/windows/desktop/ms740476(v=vs.85).aspx – Neil

+0

为什么你使用相同的端口 - http://xyproblem.info/? –

+0

是的,可以使用SO_REUSEADDR选项将相同的端口绑定到两个不同的套接字。 –

回答

0

这是正常行为。我认为这不能通过在同一端口上侦听的2个套接字完成。

你为什么要结合2个插座到同一个端口?

Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?

对Linux来说,甚至会尝试均匀地分布在2个插座之间的数据包,所以它的随机。您将需要更改发送/接收数据包的方式。

+0

当两个UDP套接字绑定到同一个端口,并且在该端口接收到一个传入的单播数据包时,它将被传递给其中一个两个插座(任意选择)。如果传入的数据包是一个多播UDP数据包OTOH,它将被传递到绑定到该端口的每个套接字。 (为了允许同一主机上的多个节目同时收听同一个多播组,需要后者的行为) –

+0

好点。我没有包含它,因为op没有提到使用多播。 – rinn2883

+0

谢谢你们,那我该如何处理这个问题呢?由于我通过互联网发送数据包,我可以使用多播模式发送数据包吗? –

相关问题