2016-09-18 2 views
0

Ich möchte einen Befehl an meinen Sonos-Lautsprecher senden. Mit meiner Windows-Anwendung ist das einfach. Ich verwende nur das TcpClient-Beispiel, das auf der Microsoft-Website bereitgestellt wird (siehe unten).Windows IoT TcpClient

public void Connect(String server, String message) 
    { 
     try 
     {     
      TcpClient client = new TcpClient(server, 1400); 

      // Translate the passed message into ASCII and store it as a Byte array. 
      Byte[] data = System.Text.Encoding.ASCII.GetBytes(message); 

      // Get a client stream for reading and writing. 
      // Stream stream = client.GetStream(); 

      NetworkStream stream = client.GetStream(); 

      // Send the message to the connected TcpServer. 
      stream.Write(data, 0, data.Length); 

      //Console.WriteLine("Sent: {0}", message); 

      // Receive the TcpServer.response. 

      // Buffer to store the response bytes. 
      data = new Byte[256]; 

      // String to store the response ASCII representation. 
      String responseData = String.Empty; 

      // Read the first batch of the TcpServer response bytes. 
      Int32 bytes = stream.Read(data, 0, data.Length); 
      responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); 
      //Console.WriteLine("Received: {0}", responseData); 

      // Close everything. 
      stream.Close(); 
      client.Close(); 
     } 
     catch (ArgumentNullException e) 
     { 
      //Console.WriteLine("ArgumentNullException: {0}", e); 
     } 
     catch (SocketException e) 
     { 
      // Console.WriteLine("SocketException: {0}", e); 
     } 

     //Console.WriteLine("\n Press Enter to continue..."); 
     //Console.Read(); 
    } 

Nun, wie würde ich dies mit Windows 10 IoT auf einem Raspberry Pi 3 tun?

Antwort

0

Mit UWP müssen Sie möglicherweise auf das Nuget-Paket "System.NetSockets" verweisen, um TcpClient zu verwenden. Sie enden wahrscheinlich mit so etwas wie unten Schnipsel,

async void FunctionName() 
    { 
     try 
     { 
      using (var client = new TcpClient()) 
      { 
       await client.ConnectAsync(server, 1400); 

       // Translate the passed message into ASCII and store it as a Byte array. 
       Byte[] data = System.Text.Encoding.ASCII.GetBytes(message); 

       // Get a client stream for reading and writing. 
       // Stream stream = client.GetStream(); 
       NetworkStream stream = client.GetStream(); 

       // Send the message to the connected TcpServer. 
       stream.Write(data, 0, data.Length); 

       //Console.WriteLine("Sent: {0}", message); 

       // Receive the TcpServer.response. 

       // Buffer to store the response bytes. 
       data = new Byte[256]; 

       // String to store the response ASCII representation. 
       String responseData = String.Empty; 

       // Read the first batch of the TcpServer response bytes. 
       Int32 bytes = stream.Read(data, 0, data.Length); 
       responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); 
       //Console.WriteLine("Received: {0}", responseData); 
      } 
     } 
     catch (ArgumentNullException e) 
     { 
      //Console.WriteLine("ArgumentNullException: {0}", e); 
     } 
     catch (SocketException e) 
     { 
      // Console.WriteLine("SocketException: {0}", e); 
     } 

     //Console.WriteLine("\n Press Enter to continue..."); 
     //Console.Read(); 
    } 

Beachten Sie, dass die Internet-Client-Fähigkeit in Ihrem Projekt Manifest-Datei deklarieren müssen auf.

enter image description here PS: Es gibt auch eine alternative Alternative StreamSocket.

Siehe ein vollständiges Codebeispiel von Microsoft GitHub repository.

Wenn Sie neu in der UWP-Programmierung sind, sollten Sie sich mit dem async/await-Muster vertraut machen.