我查看了HttpListener类的MSDN文档,测试它提供的例子 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! 我将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是你自定义端口,不加入白名单,默认是禁止的 |
|
如果是防火墙问题,我启动Tomcat服务,也是用8080端口,局域网机子应该不能访问才对,但测试结果是可以访问。 Win7系统没有防火墙白名单呀,怎么办? |
|
10分 |
先确定是不是防火墙的问题,把防火墙关了试试
|
关闭防火墙测试,还是不行,应该不防火墙问题吧,现在更没思路了 |
|
关闭防火墙后,也换过其他端口测试了,还是不行
|
|
不好意思,刚才关闭防火墙测试,是本地的浏览器输入固定IP访问不了的,现在用局域网其他电脑能正常访问了,现在知道是防火墙问题了。 但我不能关闭防火墙运行程序的,有什么好的方法解决? |
|
我在另一个帖子的一段代码:http://bbs.csdn.net/topics/390963758
看看哪里的个别字符不一样。 |
|
10分 |
要让其它电脑访问,你需要把 端口号 加入防火墙的“例外”(或者“出栈、入栈”)规则中。 |
太好了,太感谢了,在高级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(); } 测试通过,可以结贴了,感谢各位大牛的帮助! |