我的树莓派3上的web服务器与win10 IoT

本文关键字:服务器 win10 IoT web 上的 我的 | 更新日期: 2023-09-27 18:09:50

我尝试在我的树莓派3上运行一个带有win10 IoT的web服务器。

它向我显示了调试行"START WEBSERVER",而不是输出控制台的"HANDLE REQUEST"行。当我尝试用浏览器打开页面时(从同一网络中的其他设备),它不会加载页面。

I可以毫无问题地访问端口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 OK'r'n" +
                            $"Content-Length: {bodyStream.Length}'r'n" +
                                "Connection: close'r'n'r'n";
                byte[] headerArray = Encoding.UTF8.GetBytes(header);
                await response.WriteAsync(headerArray, 0, headerArray.Length);
                await bodyStream.CopyToAsync(response);
                await response.FlushAsync();
            }
        }
    }
}

我的树莓派3上的web服务器与win10 IoT

这种情况通常会发生,因为以下原因之一:

-该页面的访问仅限于您加载服务的设备。
-通道不支持设备间服务
-防火墙问题或端口转发。

尝试检查您的服务,或者您可以尝试在通道中实际打开的端口上运行它。在您的回程网关上打开一个端口ex(554),并在您的侦听设备中使用它。

请注意,如果您的bios中没有虚拟化,有时可能会发生这个问题。

在清单中添加"Internet (Client &服务器)是解决方案。