使用 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
我正在尝试创建一个从 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