UWP

时间:2017-11-22 22:39:17

标签: c# sockets uwp .net-core

我有这个代码适用于控制台应用程序(.NET Core)的项目类型。

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

但是当我在空白应用程序(通用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:'连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应'< / p>

UWP应用程序具有专用网络(客户端和服务器) Internet(客户端和服务器)功能。

打开和关闭防火墙没有帮助。

目标版本: Windows 10 Creators更新(10.0; Build 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());
}

1 个答案:

答案 0 :(得分:0)

调试UWP&amp;来自localhost的TCP侦听器一直存在问题。您的代码没问题,如果您尝试从外部计算机连接它,它应该可以工作。您看到的问题很可能是network isolation中的错误/超v问题/网络问题。

您可以检查是否已启用应用程序的网络隔离(默认情况下),从命令提示符运行以下命令:

const headers = new Headers();
headers.append('Cache-Control', 'no-cache');
headers.append('Pragma', 'no-cache');
this.http.get('my url', {headers: headers}); // make the call

我的建议是使用外部计算机确保您的代码正常(应该是)。在那之后你可以尝试与网络隔离战斗,但这可能是令人沮丧的。

以下是讨论过这个问题的另一个问题:Unable to access TCP Server inside a Windows Universal Application