2017-08-18 4 views
0

J'essaie de créer une petite application qui lit les données à partir du port Série/Com et diffuse les données sur mon réseau en utilisant le port 15000.Accès refusé lors de l'envoi de données avec UdpClient

Tout fonctionne bien sur Windows et Linux (en utilisant Mono), mais je reçois un Socket Exception sur macOS avec le message suivant: Access denied

J'ai essayé d'exécuter mon application avec des autorisations élevées:

sudo mono ./SerialMonitor.exe

Mais cela ne fonctionne pas aussi.

Est-il possible de se débarrasser de cette exception? Et pourquoi cela fonctionne-t-il sans problèmes sur Windows et Linux?

Voici mon code:

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; 
       } 
      } 
     } 
    } 
} 

J'utilise Communauté Visual Studio 2017 pour Mac

version 7.1 (build 1297)

Mono 5.2.0.215 (D15-3/da80840) (64 bits)

configuration du projet:

Framework 4 .6.1

x86

Répondre