2016-11-07 11 views
0

Ich höre auf Verbindungen über eine Windows Universal App und möchte eine Verbindung zu dieser App über eine Windows-Konsolenanwendung herstellen. Ich habe einige grundlegende Code getan, die ich denke, sollte eine Verbindung herstellen, aber ich bekomme einen Timeout-Fehler von der Konsolenanwendung.Wie stelle ich eine Verbindung zu einer Windows Universal App StreamSocket über eine Konsolenanwendung her?

Die Windows Universal App geht nie sogar in die Verbindung empfangene Funktion.

Der Server (UWP):

public async void SetupServer() 
    { 
     try 
     { 
      //Create a StreamSocketListener to start listening for TCP connections. 
      Windows.Networking.Sockets.StreamSocketListener socketListener = new Windows.Networking.Sockets.StreamSocketListener(); 

      //Hook up an event handler to call when connections are received. 
      socketListener.ConnectionReceived += SocketListener_ConnectionReceived; 

      //Get Our IP Address that we will host on. 
      IReadOnlyList<HostName> hosts = NetworkInformation.GetHostNames(); 
      HostName myName = hosts[3]; 

      //Assign our IP Address 
      ipTextBlock.Text = myName.DisplayName+":1771"; 
      ipTextBlock.Foreground = new SolidColorBrush(Windows.UI.Color.FromArgb(255,0,255,0)); 

      //Start listening for incoming TCP connections on the specified port. You can specify any port that' s not currently in use. 
      await socketListener.BindEndpointAsync(myName, "1771"); 
     } 
     catch (Exception e) 
     { 
      //Handle exception. 
     } 
    } 

Der Client (Konsole-Anwendung):

static void Main(string[] args) 
    { 
     try 
     { 
      byte[] data = new byte[1024]; 
      int sent; 
      string ip = "192.168.0.5"; 
      int port = 1771; 
      IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(ip), port); 
      TcpClient client = new TcpClient(); 
      client.Connect(ipep); //**************Stalls HERE************ 
      using (NetworkStream ns = client.GetStream()) 
      { 
       using (StreamReader sr = new StreamReader(ns)) 
       { 
        using (StreamWriter sw = new StreamWriter(ns)) 
        { 
         sw.WriteLine("Hello!"); 
         sw.Flush(); 
         System.Threading.Thread.Sleep(1000); 
         Console.WriteLine("Response: " + sr.ReadLine()); 
        } 
       } 
      } 
     } 
     catch (Exception e) 
     { 

     } 
    } 

Antwort

1

Ich habe Ihren Code auf meiner Seite getestet und es kann gut funktionieren. Es ist also nichts falsch mit Ihrem Code. Aber ich kann Ihr Problem reproduzieren, indem Sie den Server und den Client auf demselben Gerät ausführen, der Client wird dieselbe Ausnahme auslösen, wie Sie oben gezeigt haben. Stellen Sie daher sicher, dass Sie von einem anderen Computer aus eine Verbindung herstellen. Wir können keine Verbindung zu einer uwp-App StreamSocketListener aus einer anderen App oder einem anderen Prozess herstellen, der auf demselben Computer ausgeführt wird. Dies ist nicht zulässig. Nicht einmal mit einer loopback Ausnahme.

Bitte stellen Sie auch sicher, dass Internet(Client&Server)capability aktiviert ist. Und auf dem Client können Sie den Server 192.168.0.5 erfolgreich anpingen.

+0

Danke Ich wusste nicht, dass ich sie nicht auf der gleichen Maschine laufen lassen konnte. Warum das? Wird es repariert werden? –

+0

@SethKitchen, das ist kein Fehler, das ist von Entwurf. Dies wird durch die Netzwerkisolierung eingeschränkt. Kann aus Sicherheitsgründen sein. –

+0

Ich lese das "Hinweis Als Teil der Netzwerkisolierung verbietet das System das Herstellen von Socket-Verbindungen (Sockets oder WinSock) zwischen zwei UWP-Anwendungen, die auf demselben Computer entweder über die lokale Loopback-Adresse (127.0.0.0) oder explizit unter Angabe der lokalen IP-Adresse ausgeführt werden "unter https://docs.microsoft.com/en-us/windows/uwp/networking/sockets - aber warum kann ich keine Verbindung zu einer Nicht-UWP-App wie einem lokalen Browser herstellen? Erhalten Sie nicht, was das Sicherheitsproblem wirklich ist, besonders wenn sie nicht erlauben, die IP-Adresse zu benutzen und mindestens einen Firewall-Port zu öffnen –

Verwandte Themen