C# 服务器客户端在连接 UWP 时失败

Posted

技术标签:

【中文标题】C# 服务器客户端在连接 UWP 时失败【英文标题】:C# server client fails on connect UWP 【发布时间】:2016-07-14 20:08:40 【问题描述】:

我尝试在 UWP 上使用简单的 TCP 客户端服务器进行通信,我点击了此链接 UWP socket,但看起来它不起作用。我为这两个应用程序添加了提供客户端和服务器的功能。即使它没有出现在代码中,我已经处理了错误,这给了我以下信息:System.Runtime.InteropServices.COMException (0x8007274C): A connection attemps has failed because the connected part has not answer after a certain amount of time or the connection has failed because host has not respond

System.Runtime.InteropServices.COMException (0x8007274C): Une tentative de connexion a échoué car le parti connecté n’a pas répondu convenablement au-delà d’une certaine durée ou une connexion établie a échoué car l’hôte de connexion n’a pas répondu.

据我所知,它在await clientSocket.ConnectAsync(serverHost, serverPort); 行失败

在期限内,它应该在 Rasperry Pi 3 上运行服务器,在 Windows 10 移动版(Lumia 950 XL build 14385)上运行客户端,但到目前为止,我只在运行 Windows 10 Pro(build 14385)的 Surface Pro 3 上运行

客户

try

        StreamSocket clientSocket;

        clientSocket = new StreamSocket();
        HostName serverHost = new HostName("localhost");
        string serverPort = "5464";
        await clientSocket.ConnectAsync(serverHost, serverPort);
        Stream streamOut = clientSoket.OutputStream.AsStreamForWrite();
        StreamWriter writer = new StreamWriter(streamOut);
        string request = "test";
        await writer.WriteLineAsync(request);
        await writer.FlushAsync();
        Stream streamIn = clientSocket.InputStream.AsStreamForRead();
        StreamReader reader = new StreamReader(streamIn);
        string response = await reader.ReadLineAsync();
    
    catch(Exception ex)
    
        Console.WriteLine(ex.ToString());//handle
    

服务器

try

    serverSocket = new StreamSocketListener();
    serverSocket.ConnectionReceived += ServerSocket_ConnectionReceived;
    await serverSocket.BindServiceNameAsync("5464");

catch(Exception e)

    Console.WriteLine(e.ToString());//handle


private async void ServerSocket_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)

    Stream inputStream = args.Socket.InputStream.AsStreamForRead();
    StreamReader reader = new StreamReader(inputStream);
    string request = await reader.ReadLineAsync();
        Stream outputStream = args.Socket.OutputStream.AsStreamForWrite();
    StreamWriter writter = new StreamWriter(outputStream);
    await writter.WriteLineAsync("Ok");
    await writter.FlushAsync();

【问题讨论】:

您在哪个 UWP 设备系列上测试代码?桌面、电话、Pi 等。我在测试恢复时遇到了同样的问题。代码在 Pi 上运行,但我无法让它在我的台式机上运行。 稍后,服务器将在 Pi3 上,但我尝试在 Windows 10 build 14385 上运行 我确定你已经尝试过了...但是msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx 【参考方案1】:

经过一些研究并感谢 Stuart Smith,看来两个应用程序之间无法直接连接。出于开发目的,可以在本地机器上使用启用网络环回的工具来允许它。当我尝试在我的 lumia 上运行客户端并在我的 PC 上运行服务器时,它运行良好。

这里是用于理解这一点的链接。

*** UWP Enable loopback

Using network loopback in side-loaded Windows Store apps

【讨论】:

以上是关于C# 服务器客户端在连接 UWP 时失败的主要内容,如果未能解决你的问题,请参考以下文章

UWP C# 管道客户端无法连接到 Win32 C++ 管道服务器

UWP C# 项目中的 HTTP 重定向请求失败

为 MQTTnet 客户端消息的 TLS/SSL 加密导入的 PFX 证书适用于服务,但适用于 Xamarin UWP 应用程序失败

UWP 后台音频失败,因为 RPC 服务器不可用

SystemMediaTransportControl GetForCurrentView() 在桌面设备系列上的音频后台任务中失败(UWP C#

移动 StorageFile 后立即在 UWP 中打开 SQLite 连接