gpt4 book ai didi

c# - 在 C# 中使用相同 UDP 端口的多个程序/实例

转载 作者:行者123 更新时间:2023-12-03 11:49:48 25 4
gpt4 key购买 nike

我正在为一些网络魔法而苦苦挣扎,希望有人能够向我解释发生了什么。
我正在尝试重用 udp 端口​​。因此,如果我有多个程序在同一个 udp 端口​​上监听,我希望两个应用程序都能接收不同设备发送的数据。
使用以下代码,我能够做到这一点:

            IPEndPoint localEndoint = new IPEndPoint(IPAddress.Any, 67);    //the local endpoint used to listen to port 67
//Create a new UDP Client and bind it to port 67
DhcpSniffer = new UdpClient();
DhcpSniffer.ExclusiveAddressUse = false; //Allow multible clients to connect to the same socket
DhcpSniffer.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); // Connect even if socket/port is in use
DhcpSniffer.Client.Bind(localEndoint);
DhcpSniffer.Client.ReceiveTimeout = Timeout;
//receive on port 67
dhcpPacket = DhcpSniffer.Receive(ref localEndoint);
我的两个程序都可以监听网络中的 DHCP 消息,并且不会相互阻塞。
现在我想对 RTP 视频流传输到的端口 15120 做同样的事情。但是,这不起作用。我使用相同的代码但没有成功,一次只有一个应用程序可以接收流,另一个将超时运行。
            IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, port);
//Create a new UDP Client and bind it to port 15120
udpReceiver = new UdpClient();
udpReceiver.ExclusiveAddressUse = false; //this is an attempt to receive the stream on mutlible instances...this works for DHCP but not for RTP for some reason....
udpReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); // Connect even if socket/port is in use
udpReceiver.Client.ReceiveTimeout = timeout; //set the sockete timeout
udpReceiver.Client.Bind(RemoteIpEndPoint); //bind to the port from any IP
//receive packets on port 15120
Byte[] receiveBytes = udpReceiver.Receive(ref RemoteIpEndPoint);
我希望有人能够照亮我的困惑
更新:
我发现它可以与 DHCP 一起使用,因为它被发送到广播 IP (255.255.255.255)。现在我需要找出如何更改 Socket 行为以将我的 RTP 流视为广播,以便我可以同时在两个应用程序中看到它。 (是的,我可以将流源配置为广播,但这不是目的)。
目标是重新配置 Socket 以按照说明进行操作。不要将流保存在硬盘驱动器上或使用本地主机重定向它。

最佳答案

首先,不可能有多个程序在同一个端口上监听(据我所知,这是一个很大的安全冲突)
你可以做的很困难,是使用一个监听你的端口(我们称之为端口 8080)的 NetworkManager,然后它将信息重定向到你的应用程序端口(App1 可以使用端口 8081,App2 使用端口 8082)。您自己编写,使用 Flask 监听 8080,然后将包重新路由到 localhost:8081 和 localhost:8082 可能是一个简单而快速的解决方案。
这样做将帮助您保护网络,并且您可以根据需要重定向到任意数量的端口,就像 docker swarm 将传入网络平衡到其集群一样。

关于c# - 在 C# 中使用相同 UDP 端口的多个程序/实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65144659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com