使用 UdpClient 发送数据时访问被拒绝

Access denied when sending data with UdpClient

我正在尝试创建一个从 Serial-/Com-Port 读取数据并使用端口 15000.

将数据广播到我的网络的小型应用程序

在 Windows 和 Linux(使用 Mono)上一切正常,但我在 macOS 上收到 Socket Exception 并显示以下消息:Access denied

我尝试 运行 我的应用程序具有提升的权限:

sudo mono ./SerialMonitor.exe

但这也行不通。

有什么方法可以消除该异常吗?为什么它在 Windows 和 Linux 上没有任何问题?

这是我的代码:

using System;
using System.IO.Ports;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SerialMonitor
{
    class MainClass
    {
        static SerialPort mSerial = new SerialPort();
        static String[] mSerialPorts;
        static UdpClient mNetwork;
        static IPEndPoint mIP;

        static String mData = "";

        public static void Main(string[] args)
        {
            mNetwork = new UdpClient();
            mIP = new IPEndPoint(IPAddress.Parse("192.168.1.255"), 15000);

            mSerialPorts = SerialPort.GetPortNames();

            Console.WriteLine("Select a serial port:");
            if (mSerialPorts.Length == 0)
            {
                Console.WriteLine("No serial ports available!");
                return;
            }
            for (int i = 0; i < mSerialPorts.Length; i++)
            {
                Console.WriteLine(i + 1 + ": " + mSerialPorts[i]);
            }
            Console.Write("Selection: ");
            int selection = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Selected port: " + mSerialPorts[selection - 1]);

            mSerial.PortName = mSerialPorts[selection - 1];
            mSerial.BaudRate = 9600;
            mSerial.NewLine = "\r\n";
            mSerial.Open();
            mSerial.DiscardInBuffer();

            Console.WriteLine("\nData:");

            while (true)
            {
                try
                {
                    MainClass.mData = mSerial.ReadLine();
                    Console.WriteLine(MainClass.mData);

                    byte[] bytes = Encoding.ASCII.GetBytes(MainClass.mData);
                    mNetwork.Send(bytes, bytes.Length, mIP);
                }
                catch(SocketException ex)
                {
                    Console.WriteLine("\nNETWORK ERROR: " + ex.Message);
                    Console.Read();
                    return;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("\nERROR: " + ex.Message);
                    Console.Read();
                    return;
                }
            }
        }
    }
}

我正在为 Mac

使用 Visual Studio Community 2017

版本 7.1(内部版本 1297)

单声道 5.2.0.215 (d15-3/da80840)(64 位)

项目配置:

.NET Framework 4.6.1

x86

如果您想通过本地子网发送广播消息(或一般的广播),您必须在您的套接字上启用广播:

mNetwork.EnableBroadcast = true;

参考:

https://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient(v=vs.110).aspx

http://answers.unity3d.com/questions/248494/socket-exception-access-denied.html