Итак, я установил простую StreamSocketListener
в своем UWP
StreamSocketListener listener = new StreamSocketListener();
public async void StartServer()
{
await listener.BindServiceNameAsync("8282");
listener.ConnectionReceived += async (s, a) =>
{
using (var output = a.Socket.OutputStream)
{
using (var response = output.AsStreamForWrite())
{
var html = Encoding.UTF8.GetBytes(
$"<html><head><title>Background Message</title></head><body>Hello from the background process!<br/></body></html>");
using (var bodyStream = new MemoryStream(html))
{
var header = $"HTTP/1.1 200 OK\r\nContent-Length: {bodyStream.Length}\r\nConnection: close\r\n\r\n";
var headerArray = Encoding.UTF8.GetBytes(header);
await response.WriteAsync(headerArray,
0, headerArray.Length);
await bodyStream.CopyToAsync(response);
await response.FlushAsync();
}
}
}
};
}
Затем я добавил это в свой манифест приложения с именем семейства пакетов, которое я получил из графического интерфейса для манифеста пакета.
<Extensions>
<uap4:Extension Category="windows.loopbackAccessRules">
<uap4:LoopbackAccessRules>
<uap4:Rule Direction="out" PackageFamilyName="<my package fam name>" />
<uap4:Rule Direction="in" PackageFamilyName="<my package fam name>" />
</uap4:LoopbackAccessRules>
</uap4:Extension>
</Extensions>
Я вошел и настроил правильные возможности
<Capability Name="privateNetworkClientServer"/>
<Capability Name="internetClientServer"/>
<uap3:Capability Name="remoteSystem"/>
<Capability Name="internetClient"/>
Наконец, я включил обратную связь с checknetisolation
, как показано в этом посте UWP Включение обратной связи по локальной сети
Однако мой веб-сервер доступен только с других устройств в моей сети.Он не подключится, если я
- подключусь к интрасети ip: 8282
- подключусь к локальному узлу: 8282
- подключусь к 127.0.0.1:8282
Я попытался подключиться из Chrome, Firefox, FireFox с прокси к нему, и curl
Я запустил netstat -ano | FIND "8282"
, и я вижу, что порт открыт
TCP 0.0.0.0:8282 0.0.0.0:0 LISTENING 5920
TCP [::]:8282 [::]:0 LISTENING 5920
Я также попытался запустить checknetisolation debug -n=<my package fam name>
, но в выводе не было никакой реальной информации
Summary Report
Network Capabilities Status
----------------------------------------------------------------------
InternetClient Not Used and Insecure
InternetClientServer Not Used and Insecure
PrivateNetworkClientServer Not Used and Insecure
Detailed Traffic Report
----------------------------------------------------------------------
InternetClient Not Used and Insecure
------------------------------------------------------------------
InternetClientServer Not Used and Insecure
------------------------------------------------------------------
PrivateNetworkClientServer Not Used and Insecure
------------------------------------------------------------------
OK.
Я не знаю, куда идти