2017-11-22 3 views
0

このコードは、プロジェクトタイプコンソールアプリケーション(.NETコア)で問題なく動作します。UWPのソケット接続のタイムアウト

class Program 
{ 
    static void Main(string[] args) 
    { 
     var L = new TcpListener(IPAddress.Any, 4994); 
     L.Start(); 

     using (var C = L.AcceptTcpClientAsync().Result) 
     { 
      var S = C.GetStream(); 

      var BR = new BinaryReader(S); 
      var BW = new BinaryWriter(S); 

      BW.Write("This is from Console!!!"); 
      Console.WriteLine(BR.ReadString()); 
     } 
    } 
} 

しかし、私はブランクのApp(ユニバーサル・Windowsの場合)このようなのプロジェクトタイプでこのコードを使用する場合:

public MainPage() 
{ 
    InitializeComponent(); 

    ThreadPool.RunAsync(foo); 
} 

static void foo(IAsyncAction operation) 
{ 
    var L = new TcpListener(IPAddress.Any, 4994); 
    L.Start(); 

    using (var C = L.AcceptTcpClientAsync().Result) 
    { 
     var S = C.GetStream(); 

     var BR = new BinaryReader(S); 
     var BW = new BinaryWriter(S); 

     BW.Write("This is from UWP!!!"); 
     Debug.Write(BR.ReadString()); 
    } 
} 

私はのnetstatでそれをチェックするときには、そのポートに耳を傾けますが、クライアントがこの例外を接続したいときにスローされます。

System.Net.Sockets.SocketException:「接続されたホストが応答に失敗したため、接続先が適切に一定期間後に応答、または接続を確立していなかったため、接続の試行が失敗したが失敗した」

UWPアプリケーションにはプライベートネットワーク(クライアント&サーバ)インターネット(クライアント&サーバ)があります。

ファイアウォールをオンまたはオフにすることは役に立ちませんでした。

対象バージョン:のWindows 10クリエーターアップデート(10.0; 15063の構築)WPFアプリケーションです

クライアントコード:

using (var C = new TcpClient("127.0.0.1", 4994)) 
{ 
    var S = C.GetStream(); 

    var BR = new BinaryReader(S); 
    var BW = new BinaryWriter(S); 

    BW.Write("This is a test"); 
    MessageBox.Show(BR.ReadString()); 
} 
+0

あなたが同じマシンからソケットにアクセスしようとしています:

ここでは、これが議論されている別の問題ですか? [ネットワーク隔離ツール](https://msdn.microsoft.com/en-us/library/windows/apps/hh780593.aspx)を確認してください。 –

答えて

0

System.Net.Sockets.SocketException: '接続試行に失敗しました 時間後に接続先が正しく応答しなかったか、接続されたh OSTは が原因モデムのNATを修正するNetwork address translation (NAT)

てみてください「の

かもしれないが応答に失敗した、実際に私たちはそれを修正することができますかわからないが、私は、NATていない別のネットワークに切り替えるとき例外はなくなった。

0

UWPのデバッグ& localhostのTCPリスナーは、常に問題がありました。あなたのコードはOKで、外部のコンピュータから接続しようとするとうまくいくはずです。あなたが見ている問題は、おそらく、network isolationのバグ/ハイパーVの問題/ネットワーキングの問題です。

アプリのネットワーク分離は、コマンドプロンプトから次を実行している(それがデフォルトである)が有効になっているかどうかをチェックすることができます

CheckNetIsolation.exe LoopbackExempt -s 

私の推薦は、必ずあなたのコードことを確認するために外部のコンピュータを使用することです大丈夫です(それはすべきです)。その後、ネットワークの隔離に取り組むことができますが、それはイライラする可能性があります。Unable to access TCP Server inside a Windows Universal Application