7

我正在编写的一个简单的 Web 服务器出现问题。我需要能够通过 localhost 和 IP 连接到服务器。但是,我在通过 IP 连接时遇到问题。这是我的代码:

private void start_button_Click(object sender, EventArgs e)
    {
        start_button.Text = "Listening...";

        HttpListener server = new HttpListener();

        server.Prefixes.Add("http://201.0.0.10:69/");
        server.Prefixes.Add("http://localhost:69/");

        server.Start();

        while (true)
        {
            HttpListenerContext context = server.GetContext();
            HttpListenerResponse response = context.Response;

            string page = Directory.GetCurrentDirectory() +
                context.Request.Url.LocalPath;

            if (page == string.Empty)
                page = page + "index.html";

            TextReader tr = new StreamReader(page);
            string msg = tr.ReadToEnd();


            byte[] buffer = Encoding.UTF8.GetBytes(msg);

            response.ContentLength64 = buffer.Length;
            Stream st = response.OutputStream;
            st.Write(buffer, 0, buffer.Length);

            context.Response.Close();
        }
    }

我不断收到此错误:指定网络名称的格式无效。

我知道我的问题在于这一点:

server.Prefixes.Add("http://201.0.0.10:69/");

如果我注释掉这一行,我可以通过 localhost 连接。

有谁知道我可能做错了什么?


好的,我得到了 IP 地址,但现在我遇到了这条线的问题:

if (page == string.Empty)
            page = page + "index.html";

出于某种原因,它没有将 index.html 添加到末尾。

4

2 回答 2

1

除了在application.config文件中设置绑定之外,您可能还需要通过运行以下命令将系统设置为侦听来自特定 IP 地址的 http:

netsh http add iplisten 201.0.0.10

您可能还需要添加本地主机:

netsh http add iplisten 127.0.0.1

正如其他答案中提到的,将这些添加到绑定文件中:

 <binding protocol="http" bindingInformation="*:69:201.0.0.10" /> 
 <binding protocol="http" bindingInformation="*:69:localhost" />
于 2016-04-12T09:22:42.707 回答
0

对我有用的解决方案是在applicationhost.config文件中添加绑定。

此答案提供了一个示例,说明绑定信息的位置以及如何手动编辑它。

在您的情况下,以下绑定信息可能会解决您的问题:

<bindings>
 <binding protocol="http" bindingInformation="*:69:localhost" />
 <binding protocol="http" bindingInformation="*:69:201.0.0.10" /> 
</bindings>
于 2015-07-01T16:59:01.707 回答