#c# #server #uwp
#c# #сервер #uwp
Вопрос:
Я пытаюсь запустить веб-сервер на моем Raspberry Pi 3 с Win 10 IoT.
Он показывает мне строку отладки «ЗАПУСТИТЬ ВЕБ-СЕРВЕР», но не строку «ОБРАБОТАТЬ ЗАПРОС» в консоли вывода. Когда я пытаюсь открыть страницу с помощью своего браузера (с другого устройства в той же сети), страница не загружается.
Я могу получить доступ к порталу устройств на порту 8080 без проблем, так что это не проблема с брандмауэром или чем-то в этом роде.
В манифесте я добавляю частные сети (клиент и сервер).
WebServer server = new WebServer();
server.Initialise();
public class WebServer
{
private StreamSocketListener listener;
private const uint BufferSize = 8192;
public WebServer(){}
public async void Initialise()
{
Debug.WriteLine("START WEBSERVER");
listener = new StreamSocketListener();
await listener.BindServiceNameAsync("80");
listener.ConnectionReceived = (sender, args) =>
{
HandleRequest(sender, args);
};
}
public async void HandleRequest(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
StringBuilder request = new StringBuilder();
using (IInputStream input = args.Socket.InputStream)
{
byte[] data = new byte[BufferSize];
IBuffer buffer = data.AsBuffer();
uint dataRead = BufferSize;
while (dataRead == BufferSize)
{
await input.ReadAsync(buffer, BufferSize, InputStreamOptions.Partial);
request.Append(Encoding.UTF8.GetString(data, 0, data.Length));
dataRead = buffer.Length;
}
}
using (IOutputStream output = args.Socket.OutputStream)
{
using (Stream response = output.AsStreamForWrite())
{
byte[] bodyArray = Encoding.UTF8.GetBytes("<html><body>Hello, World!</body></html>");
var bodyStream = new MemoryStream(bodyArray);
var header = "HTTP/1.1 200 OKrn"
$"Content-Length: {bodyStream.Length}rn"
"Connection: closernrn";
byte[] headerArray = Encoding.UTF8.GetBytes(header);
await response.WriteAsync(headerArray, 0, headerArray.Length);
await bodyStream.CopyToAsync(response);
await response.FlushAsync();
}
}
}
}
Ответ №1:
Обычно это происходит, потому что одна из приведенных ниже причин :
— доступ к странице ограничен только для устройства, на котором вы загружаете службу.
-переулок не поддерживает службы между устройствами
— Проблемы с брандмауэром или переадресация порта.
Попробуйте проверить свой сервис или попробуйте запустить его на фактически открытом порту в переулке. Откройте порт ex (554) на вашем шлюзе Retour и используйте его в своем прослушивающем устройстве.
обратите внимание, что иногда проблема может возникнуть, если у вас нет виртуализации в вашем BIOS.
Ответ №2:
Решением было добавление в манифест «Интернет (клиент и сервер)». Частная сеть не работает.