【问题标题】:Webserver on my Raspberry Pi 3 with Win 10 IoT带有 Win 10 IoT 的 Raspberry Pi 3 上的 Web 服务器
【发布时间】:2016-10-01 16:50:42
【问题描述】:

我尝试在装有 Win 10 IoT 的 Raspberry Pi 3 上运行网络服务器。

它向我显示了调试行“START WEBSERVER”,但没有显示输出控制台中的“HANDLE REQUEST”行。当我尝试使用我的浏览器(从同一网络中的另一台设备)打开该页面时,它不会加载该页面。

我可以毫无问题地访问端口 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();
            }
        }

    }

}

【问题讨论】:

    标签: c# server uwp


    【解决方案1】:

    这通常发生,因为以下原因之一:

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

    尝试检查您的服务,或者您可以尝试在车道上实际打开的端口上运行它。在您的 Retour Gateway 上打开一个端口 ex (554) 并在您的监听设备中使用它。

    请注意,如果您的 bios 中没有虚拟化,有时可能会出现此问题。

    【讨论】:

      【解决方案2】:

      在清单中添加“Internet(客户端和服务器)”是解决方案。专用网络不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-04
        • 2021-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多