Winform HttpListener监听问题

.Net技术 码拜 6年前 (2015-05-11) 894次浏览 0个评论

我查看了HttpListener类的MSDN文档,测试它提供的例子
https://msdn.microsoft.com/zh-cn/library/system.net.httplistener.aspx

class Program
    {
        static void Main(string[] args)
        {
            SimpleListenerExample(new string[]{"http://*:8080/"});
        }

        // This example requires the System and System.Net namespaces.
        public static void SimpleListenerExample(string[] prefixes)
        {
            if (!HttpListener.IsSupported) {
                Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
                return;
            }
            // URI prefixes are required,
            // for example "http://contoso.com:8080/index/".
            if (prefixes == null || prefixes.Length == 0)
                throw new ArgumentException("prefixes");

            // Create a listener.
            HttpListener listener = new HttpListener();
            // Add the prefixes.
            foreach (string s in prefixes) {
                listener.Prefixes.Add(s);
            }
            listener.Start();
            Console.WriteLine("Listening...");
            // Note: The GetContext method blocks while waiting for a request. 
            HttpListenerContext context = listener.GetContext();
            HttpListenerRequest request = context.Request;
            // Obtain a response object.
            HttpListenerResponse response = context.Response;
            // Construct a response.
            string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
            // Get a response stream and write the response to it.
            response.ContentLength64 = buffer.Length;
            System.IO.Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            // You must close the output stream.
            output.Close();
            listener.Stop();
        }
    }

在代码中将URL设置为”http://*:8080/”,启动运行,并在浏览器输入http://127.0.0.1:8080/或http:localhost:8080/都能监听返回信息Hello world!
之后我固定本地IP
Winform HttpListener监听问题
在浏览器输入http://192.168.1.126:8080/却无法监听到

我将URL设置”http://192.168.1.126:8080/后运行,也是输入127.0.0.1和localhost能监听,而输入固定的IP地址时不能监听

这是怎么回事???求帮忙!

20分
看下防火墙,8080端口加入白名单了吗

你用127.0.0.1或localhost的时候,是直接内存映射的,不走网卡,当然也不走防火墙

你把网线拔掉,127.0.0.1也是能ping通的

此外,看看网线插了没有,网线没插,当然IP也是没法访问的

有一些端口是不需要加入白名单,默认就允许出入的
比如80端口

而8080是你自定义端口,不加入白名单,默认是禁止的

引用 2 楼 Z65443344 的回复:

有一些端口是不需要加入白名单,默认就允许出入的
比如80端口

而8080是你自定义端口,不加入白名单,默认是禁止的

引用 2 楼 Z65443344 的回复:

有一些端口是不需要加入白名单,默认就允许出入的
比如80端口

而8080是你自定义端口,不加入白名单,默认是禁止的

如果是防火墙问题,我启动Tomcat服务,也是用8080端口,局域网机子应该不能访问才对,但测试结果是可以访问。

Win7系统没有防火墙白名单呀,怎么办?

10分
先确定是不是防火墙的问题,把防火墙关了试试
引用 4 楼 FoxDave 的回复:

先确定是不是防火墙的问题,把防火墙关了试试

关闭防火墙测试,还是不行,应该不防火墙问题吧,现在更没思路了

关闭防火墙后,也换过其他端口测试了,还是不行
引用 4 楼 FoxDave 的回复:

先确定是不是防火墙的问题,把防火墙关了试试

不好意思,刚才关闭防火墙测试,是本地的浏览器输入固定IP访问不了的,现在用局域网其他电脑能正常访问了,现在知道是防火墙问题了。

但我不能关闭防火墙运行程序的,有什么好的方法解决?

我在另一个帖子的一段代码:http://bbs.csdn.net/topics/390963758

看看哪里的个别字符不一样。

10分
引用 7 楼 xiangxinzijiwonen 的回复:
Quote: 引用 4 楼 FoxDave 的回复:

先确定是不是防火墙的问题,把防火墙关了试试

不好意思,刚才关闭防火墙测试,是本地的浏览器输入固定IP访问不了的,现在用局域网其他电脑能正常访问了,现在知道是防火墙问题了。

但我不能关闭防火墙运行程序的,有什么好的方法解决?

要让其它电脑访问,你需要把 端口号 加入防火墙的“例外”(或者“出栈、入栈”)规则中。

引用 9 楼 sp1234 的回复:
Quote: 引用 7 楼 xiangxinzijiwonen 的回复:
Quote: 引用 4 楼 FoxDave 的回复:

先确定是不是防火墙的问题,把防火墙关了试试

不好意思,刚才关闭防火墙测试,是本地的浏览器输入固定IP访问不了的,现在用局域网其他电脑能正常访问了,现在知道是防火墙问题了。

但我不能关闭防火墙运行程序的,有什么好的方法解决?

要让其它电脑访问,你需要把 端口号 加入防火墙的“例外”(或者“出栈、入栈”)规则中。

太好了,太感谢了,在高级windows防火墙添加了端口的入站和出站规则(Win7),测试通过了。

不知道有没有DOS命令可以修改防火墙规则?

防火墙操作DOS命令
http://blog.csdn.net/hyholine/article/details/7729172

在服务监听启动之前添加打开端口的方法:

private static void AddFireWallPort(int port)
        {
            string argsDll = String.Format(@"firewall set portopening TCP {0} ENABLE", port);
            ProcessStartInfo psi = new ProcessStartInfo("netsh", argsDll);
            psi.Verb = "runas";
            psi.CreateNoWindow = true;
            psi.WindowStyle = ProcessWindowStyle.Hidden;
            psi.UseShellExecute = false;
            Process.Start(psi).WaitForExit();
        }

测试通过,可以结贴了,感谢各位大牛的帮助!


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Winform HttpListener监听问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!