Mutlcast UDP:通常只允许使用每个套接字地址(协议/网络地址/端口)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (31)

我试图使用UDPClient来侦听多播IP(UDP端口3000)数据包。

当我运行发件人程序(它也侦听该端口)时,我将在行UdpClient侦听器=.

System.Net.Sockets.SocketException: 
 'Only one usage of each socket address (protocol/network address/port) is normally permitted'

但是,如果它没有运行,我不会收到这个错误,但是程序会锁定等待数据包到达。

该方案的全文如下:

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Vtunnel
{
    public class UDPListener
    {
        private const int listenPort = 3000;
        private const string multicastIP = "239.0.0.0";
        private const string myIP = "10.4.30.239";

        public static void StartListener() { 
            bool done = false;
            IPAddress listenAddress;
            IPAddress myAddress;

            IPAddress.TryParse(multicastIP, out listenAddress);
            UdpClient listener = new UdpClient(listenPort);
            IPEndPoint groupEP = new IPEndPoint(listenAddress, listenPort);

            try
            {
                while (!done)
                {
                    Console.WriteLine("Waiting for multicast");
                    byte[] bytes = listener.Receive(ref groupEP);

                    Console.WriteLine("Received multicast from {0} :\n {1}\n",
                        groupEP.ToString(),
                        Encoding.ASCII.GetString(bytes, 0, bytes.Length));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                listener.Close();
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            UDPListener.StartListener();
        }
    }
}
提问于
用户回答回答于

为什么服务器要监听同一个端口?(通常)不能在同一台机器上有更多的应用程序,在同一端口上侦听错误消息状态。

问题:

如果有更多的应用程序在监听,那么谁会接收传入的字节?如果其中一个读取一半的缓冲区,另一个将看到什么?

扫码关注云+社区

领取腾讯云代金券