我的树莓派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();
}
}
}
}
这种情况通常会发生,因为以下原因之一:
-该页面的访问仅限于您加载服务的设备。
-通道不支持设备间服务
-防火墙问题或端口转发。
尝试检查您的服务,或者您可以尝试在通道中实际打开的端口上运行它。在您的回程网关上打开一个端口ex(554),并在您的侦听设备中使用它。
请注意,如果您的bios中没有虚拟化,有时可能会发生这个问题。
在清单中添加"Internet (Client &服务器)是解决方案。