C# HTTP 错误 400 - 无效主机名简单 Http 侦听器

问题描述 投票:0回答:3
using System.Net;
using System.Text;

namespace HttpServer
{
    class Program
    {
        // Main method
        static void Main()
        {
            using var listener = new HttpListener();
            listener.Prefixes.Add("http://localhost:10060/");

            listener.Start();

            Console.WriteLine("Listening on port 10060...");

            // Request handler
            while (true)
            {
                HttpListenerContext context = listener.GetContext();
                HttpListenerRequest req = context.Request;

                Console.WriteLine($"Received request for {req.Url}");

                // TODO: Login stuff
                Uri? url = req.Url;
                if (url.ToString() == "http://localhost:10060/login")
                {
                    using HttpListenerResponse resp = context.Response;
                    resp.Headers.Set("Content-Type", "text/plain");

                    string data = "Hello there!";
                    byte[] buffer = Encoding.UTF8.GetBytes(data);
                    resp.ContentLength64 = buffer.Length;

                    using Stream ros = resp.OutputStream;
                    ros.Write(buffer, 0, buffer.Length);
                }

            }

        }
    }
}

上面的代码是一个简单的http服务器,监听请求。当在浏览器中访问 localhost:10060 时,上面的代码有效。但是,我想通过不同的设备通过同一网络上的机器IP地址访问该服务器。这样做时,由于主机名无效,会导致错误的请求。有办法解决这个问题吗?

c#
3个回答
0
投票

尝试使用 IP 地址而不是 localhost。或尝试 *:10060


0
投票

我也遇到了同样的问题,在尝试了防火墙、防病毒和路由角色之后,我发现了一些可以帮助你的东西。

就我而言,我遇到了 3 个问题,以下是解决方案:

  1. Windows的防火墙(Windows Defender防火墙),您应该在您的服务端口上打开入站角色。 (如果我仅为服务的 .exe 打开角色,则不起作用。我为域和专用网络打开了端口角色)
  2. 您应该使用“HTTP://*:PORT/”或“HTTP://YOUR_STATIC_LAN_IP_OF_THE_MACHINE:PORT/”而不是使用本地主机(我的意思是:listener.Prefixes.Add(...))
  3. 您应该以管理员身份执行 VisualStudio 或构建的应用程序 .exe。

按照我的情况执行这 3 个步骤,现在我可以从同一 LAN 中的另一台设备联系该服务。

希望也能帮到你。


-1
投票

在另一台机器上尝试修改防火墙规则以允许端口 80。

  1. Windows Defender 防火墙在本地计算机上具有高级安全性。
  2. 入境规则
  3. 新规则
  4. 选择端口,下一步,TCP,特定本地端口,输入80
  5. 允许连接并保存规则。

让我们知道这是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.