【发布时间】: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();
}
}
}
}
【问题讨论】: