【问题标题】:Access denied when sending data with UdpClient使用 UdpClient 发送数据时访问被拒绝
【发布时间】:2018-01-27 09:14:27
【问题描述】:

我正在尝试创建一个小型应用程序,它从串行/通信端口读取数据并使用端口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;
                }
            }
        }
    }
}

我正在使用 Visual Studio Community 2017 for Mac

7.1 版(内部版本 1297)

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

项目配置:

.NET 框架 4.6.1

x86

【问题讨论】:

    标签: c# .net macos mono


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多