Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 相同的绑定端口UDP套接字,并在所有端口上接收数据_C_Sockets_Udp_Bind_Winsock - Fatal编程技术网

C 相同的绑定端口UDP套接字,并在所有端口上接收数据

C 相同的绑定端口UDP套接字,并在所有端口上接收数据,c,sockets,udp,bind,winsock,C,Sockets,Udp,Bind,Winsock,我需要做一个重要的测试。试验条件如下所示 我正在使用winsock,我有两个UDP套接字(Sock-A和Sock-B),它们都使用SO_REUSEADDR选项绑定到一台PC上的端口1000。 它们都将UDP数据包发送到另一个套接字(Sock-C),位于不同LAN中的Sock-C接收它们的消息 Sock-C用一些消息来响应它们,但不幸的是,我只能看到Sock-A(它已经被打开得更快)刚刚收到消息,而Sock-B什么也没有收到。当我关闭Sock-A时,我可以看到Sock-B开始接收消息 你们知道我应

我需要做一个重要的测试。试验条件如下所示

我正在使用winsock,我有两个UDP套接字(Sock-A和Sock-B),它们都使用SO_REUSEADDR选项绑定到一台PC上的端口1000。 它们都将UDP数据包发送到另一个套接字(Sock-C),位于不同LAN中的Sock-C接收它们的消息

Sock-C用一些消息来响应它们,但不幸的是,我只能看到Sock-A(它已经被打开得更快)刚刚收到消息,而Sock-B什么也没有收到。当我关闭Sock-A时,我可以看到Sock-B开始接收消息

你们知道我应该怎么做才能让Sock-A和Sock-B都能接收来自Sock-C的消息吗


谢谢~

这是正常的行为。我认为在同一个端口上监听两个套接字是不可能做到的

为什么要将两个套接字绑定到同一端口

阅读


在linux中,它甚至会尝试在两个套接字之间均匀地分布数据报,因此它是随机的。您需要更改发送/接收数据包的方式。

这是正常行为。我认为在同一个端口上监听两个套接字是不可能做到的

为什么要将两个套接字绑定到同一端口

阅读



在linux中,它甚至会尝试在两个套接字之间均匀地分布数据报,因此它是随机的。您需要更改发送/接收数据包的方式。

WinSock中是否有可用的REUSEADDR?您是否正在检查setsockopt的返回值?为什么使用相同的端口-?是的,可以使用SO_REUSEADDR选项将相同的端口绑定到两个不同的套接字。我需要使用相同端口的原因是,我有一个Voip软件,它有一个UDP侦听器来接收音频包。此应用程序已关闭,我无法更改。我需要从另一个NAT后面的某个地方向这个软件发送音频包。为了处理这些对等点的P2P连接,我需要在同一主机上绑定一个与voip软件相同的UDP套接字,并将UDP数据包发送到音频数据包的发起方。然后NAT没有端口转发和眩晕/转身,然后。。。将把数据包路由到Voip软件。Idk抱歉,我无法想象您试图用提供的解释做什么。WinSock中是否有可用的REUSEADDR?您是否正在检查setsockopt的返回值?为什么使用相同的端口-?是的,可以使用SO_REUSEADDR选项将相同的端口绑定到两个不同的套接字。我需要使用相同端口的原因是,我有一个Voip软件,它有一个UDP侦听器来接收音频包。此应用程序已关闭,我无法更改。我需要从另一个NAT后面的某个地方向这个软件发送音频包。为了处理这些对等点的P2P连接,我需要在同一主机上绑定一个与voip软件相同的UDP套接字,并将UDP数据包发送到音频数据包的发起方。然后NAT没有端口转发和眩晕/转身,然后。。。将数据包路由到Voip软件。Idk抱歉,但我无法想象您试图用提供的解释做什么。当两个UDP套接字绑定到同一端口,并且在该端口上接收到传入的单播数据包时,它将被传递到两个套接字中的一个(任意选择)。如果传入的数据包是一个多播UDP数据包OTOH,它将被传递到绑定到端口的每个套接字。(后一种行为是必要的,以便允许同一主机上的多个程序同时侦听同一个多播组)好的观点。我没有包括它,因为op没有提到使用多播。谢谢你们,我该如何处理这个问题呢?由于我是通过互联网发送数据包的,我可以以多播模式发送数据包吗?这取决于VoIP是关闭的,因此必须支持监听多播地址。对于发送,您不需要加入多播组,但对于接收,它需要加入组。当两个UDP套接字绑定到同一端口并且在该端口上接收到传入的单播数据包时,它将被传递到两个套接字中的一个(任意选择)。如果传入的数据包是一个多播UDP数据包OTOH,它将被传递到绑定到端口的每个套接字。(后一种行为是必要的,以便允许同一主机上的多个程序同时侦听同一个多播组)好的观点。我没有包括它,因为op没有提到使用多播。谢谢你们,我该如何处理这个问题呢?由于我是通过互联网发送数据包的,我可以以多播模式发送数据包吗?这取决于VoIP是关闭的,因此必须支持监听多播地址。对于发送,您不需要加入多播组,但对于接收,您需要加入组。