繁体   English   中英

正在使用的多播侦听器端口

[英]Multicast listener port in use

我是多播编程的新手。 到目前为止,我可以成功地从两个单独的进程(发送方和接收方)发送和接收多播消息。 我的问题是接收器...


接收者代码

private static void ReceiveMulticastMessages()
{
    var groupEndPoint = new IPEndPoint(IPAddress.Parse("238.8.8.8"), 23888);
    var localEndPoint = new IPEndPoint(IPAddress.Any, 23888);

    using (var udpClient = new UdpClient())
    {
        udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
        udpClient.Client.Bind(localEndPoint);
        udpClient.JoinMulticastGroup(groupEndPoint.Address, localEndPoint.Address);

        while (true)
        {
            var remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
            var bytes = udpClient.Receive(ref remoteEndPoint);
            var message = Encoding.ASCII.GetString(bytes);
            Console.WriteLine(message);
        }
    }
}

只要我为localEndPoint指定端口23888 ,上面的代码就可以工作。 如果我更改本地端口号,则不会收到任何消息。 我更愿意将其设置为0以便操作系统可以选择端口。 为什么不能指定与组播组不同的本地端口?

假设本地端点端口必须与组播组端口匹配,客户端如何处理本地端口冲突?

另一方面,应用程序(多播发送者)如何选择多播组端口,以便任何订阅者都不会发生端口冲突?

发送任何 UDP 消息(不仅仅是多播消息)时,发送方发送到的端口必须与接收方正在侦听的端口匹配。 这就是消息到达正确位置的方式。 如果消息被发送到接收者绑定的端口以外的端口,接收者将不会得到它。

因此,需要定义一个端口号,接收者将侦听该端口号并将服务器发送到该端口号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM