在C#UWP中创建一个web服务器
本文关键字:一个 web 服务器 C#UWP 创建 | 更新日期: 2023-09-27 18:20:58
我正在用C#编写一个作为通用Windows平台应用程序的web服务器。这是我到目前为止的代码:
sealed partial class App : Application
{
int port = 8000;
/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{
StartServer();
}
private void StartServer()
{
StreamSocketListener listener = new StreamSocketListener();
listener.BindServiceNameAsync(port.ToString());
Debug.WriteLine("Bound to port: " + port.ToString());
listener.ConnectionReceived += async (s, e) =>
{
Debug.WriteLine("Got connection");
using (IInputStream input = e.Socket.InputStream)
{
var buffer = new Windows.Storage.Streams.Buffer(2);
await input.ReadAsync(buffer, buffer.Capacity, InputStreamOptions.Partial);
}
using (IOutputStream output = e.Socket.OutputStream)
{
using (Stream response = output.AsStreamForWrite())
{
response.Write(Encoding.ASCII.GetBytes("Hello, World!"), 0, 1);
}
}
};
}
}
我尝试使用以下地址连接到服务器:
http://127.0.0.1:8000/C:/pathtohtmlfile/htmlfile.html
但是,连接超时。我不确定这是C#代码的问题还是其他问题。
Raymond Zuo的解决方案确实有效。但最重要的是不要忘记Packages.appxmanifest中的功能。为了在专用网络中运行服务器,应该添加:
<Capability Name="privateNetworkClientServer" />
为了在公共网络中运行服务器:
<Capability Name="internetClientServer" />
如果你想在uwp应用程序中托管服务器,请确保以下几点:
- 运行此代码的设备(设备A)和运行web浏览器的设备(装置B)必须位于同一局域网。您不能使用设备A中的浏览器访问您的服务
- 使用WIFI访问您的服务
- 你的应用程序必须处于运行状态
-
你应该写一个方法来获取ip地址,但不是127.0.0.1:
public static string FindIPAddress() { List<string> ipAddresses = new List<string>(); var hostnames = NetworkInformation.GetHostNames(); foreach (var hn in hostnames) { //IanaInterfaceType == 71 => Wifi //IanaInterfaceType == 6 => Ethernet (Emulator) if (hn.IPInformation != null && (hn.IPInformation.NetworkAdapter.IanaInterfaceType == 71 || hn.IPInformation.NetworkAdapter.IanaInterfaceType == 6)) { string ipAddress = hn.DisplayName; ipAddresses.Add(ipAddress); } } if (ipAddresses.Count < 1) { return null; } else if (ipAddresses.Count == 1) { return ipAddresses[0]; } else { return ipAddresses[ipAddresses.Count - 1]; } }
可以在手机/平板电脑上托管网络服务。
可以在Window通用应用程序中托管web服务。我以http://www.dzhang.com/blog/2012/09/18/a-simple-in-process-http-server-for-windows-8-metro-apps,也遵循了左的解决方案的三个第一步,最后我也放下了防火墙。不幸的是,我无法在localhost上运行,尽管我从这里得到了答案。无法连接到windows存储应用程序中的localhost。我目前正在处理对通用平台应用程序的javahttp请求。毫无疑问,服务器和客户端似乎需要在不同的主机上运行。