我正在尝试从我的 UWP 应用程序运行 TCP 服务器。但是我无法从另一个应用程序(我在同一台电脑上运行)连接到服务器。我尝试使用 telnet 命令。
如果我在命令行应用程序中使用此代码片段,它可以正常工作,在 UWP 应用程序中它确实会执行,但永远不会收到任何连接请求。
TcpListener serverSocket = new TcpListener(System.Net.IPAddress.Parse("127.0.0.1"), 3457);
int requestCount = 0;
TcpClient clientSocket = default(TcpClient);
serverSocket.Start();
Console.WriteLine(" >> Server Started at " + serverSocket.LocalEndpoint);
while (!serverSocket.Pending()) ; //The App will loop infinitely here never receiving any requests.
clientSocket = serverSocket.AcceptTcpClient();
Console.WriteLine(" >> Accept connection from client");
requestCount = 0;
while ((true))
{
try
{
requestCount = requestCount + 1;
NetworkStream networkStream = clientSocket.GetStream();
byte[] bytesFrom = new byte[65536];
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("\0"));
Console.WriteLine(" >> Data from client - " + dataFromClient);
string serverResponse = "Last Message from client: " + dataFromClient;
Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
networkStream.Write(sendBytes, 0, sendBytes.Length);
networkStream.Flush();
Console.WriteLine(" >> " + serverResponse);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
我也尝试了here的示例,但我仍然无法连接。在该页面中还提到,由于网络隔离,同一台 PC 上的两个 uwp 应用程序无法通过 TCP 进行通信。我的第二个应用程序不是 uwp,但我仍然使用 checknetisolation Loopbackexempt -a -n=packagename 禁用它。这也没有解决问题。 因为它确实可以与控制台一起使用,所以我认为这与 UWP 阻止我访问它有关,但我现在不知道为什么。我禁用了防火墙,但这也不是问题。 如果有人知道问题是什么或有一些想法,我将不胜感激。
我在清单中的应用程序中添加了以下内容:
<Extensions>
<uap4:Extension xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4" Category="windows.loopbackAccessRules">
<uap4:LoopbackAccessRules>
<uap4:Rule Direction="out" PackageFamilyName="My App name"/>
</uap4:LoopbackAccessRules>
</uap4:Extension>
</Extensions>
如果我使用包系列名称,我会收到错误 DEP0700:应用程序注册失败。 [0x80073CF6] 错误 0x8000FFFF 并表示在尝试注册环回 accesRules 时由于“灾难性故障”而失败
如果我使用应用程序名称,但是我可以编译,但会弹出错误消息
无法激活 Windows 应用商店应用程序“XXXX_5f208x3ge840e!App”。激活请求失败,出现错误“应用程序无法启动。”尝试重新安装应用程序来解决问题'。
您面临的基本机制可以看作是一个简单的防火墙,它在应用程序级别工作,而不是网络级别。您自由更改行为的可能性非常有限,并且不可能在您的客户 PC 上永久地执行此操作。
以下所有内容均特指本地主机。
CheckNetIsolation.exe LoopbackExempt -is -n="My App name"
CheckNetIsolation.exe LoopbackExempt -a -n="My App name"
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4">
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="MyApp.UWP.App">
<Extensions>
<uap4:Extension Category="windows.loopbackAccessRules" >
<uap4:LoopbackAccessRules>
<uap4:Rule Direction="in" PackageFamilyName="My other App name" />
<uap4:Rule Direction="out" PackageFamilyName="My other App name" />
</uap4:LoopbackAccessRules>
</uap4:Extension>
<Extensions>
</Application>
<Applications>
</Applications>
</Package>
现在,近十年后,一位 MS 经理有了洞察力,而且很有可能,将有通过项目重聚进行环回通信的常规功能:
UWP 应用默认不支持 Loopback;您需要先进行一些配置。 此 MSDN 文档 中对此进行了概述。简而言之:
privateNetworkClientServer
功能。uap4:LoopbackAccessRules
扩展名。CheckNetIsolation
工具。