日期:2014-05-18  浏览次数:21543 次

Socket为什么外网无法连接?内网可以
C# code
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Text.RegularExpressions;

namespace WebServer
{
    class HttpProcess
    {
        Socket s;

        public HttpProcess(Socket s)
        {
            this.s = s;
        }

        public void process()
        {
            string head = "";
            int len = 0;
            byte[] buf = new byte[1];
            do
            {
                len = s.Receive(buf);
                head += Encoding.ASCII.GetString(buf);
            } while (len > 0 && !head.EndsWith("\r\n\r\n"));

            Console.WriteLine(head);

            string content = "ok";

            string raw = string.Format(@"HTTP/1.1 200 OK
Content-Length: {0}
Content-Type: text/html

{1}", Encoding.Default.GetByteCount(content), content);

            Console.WriteLine(raw);

            s.Send(Encoding.Default.GetBytes(raw));
            s.Shutdown(SocketShutdown.Both);
            s.Close();
        }
    }
    public class HttpServer
    {
        static void listen()
        {
            Socket listener = new Socket(0, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 81);
            listener.Bind(endpoint);
            listener.Blocking = true;
            listener.Listen(-1);
            while (true)
            {
                Socket s = listener.Accept();
                HttpProcess p = new HttpProcess(s);
                Thread thread = new Thread(new ThreadStart(p.process));
                thread.Start();
            }
        }



        public static int Main(String[] args)
        {
            Thread thread = new Thread(new ThreadStart(listen));
            thread.Start();
            return 0;
        }
    }

}



在我本机,127.0.0.1:81和192.168.1.100:81都可以访问,但是如果放到服务器上,用222.11.22.33:81就无法访问?

请高手指教

------解决方案--------------------
可以ping到服务器吗,可以ping到的话换个1024以后的端口试试。
------解决方案--------------------
可能是端口问题,再找一个空闲的端口试试
------解决方案--------------------
查看下服务器防火墙的设置
------解决方案--------------------
探讨
可以ping到,换了1589,还是不行。

另外即使在服务器上telnet 公网ip 端口,也不通

telnet 局域网IP 端口就是通的。

------解决方案--------------------
把IPAddress.Any改成192.168.1.100测试一下...再仔细查一下路由器配置...
------解决方案--------------------
本机测没用的...网络环境很复杂,还是先仔细查一下路由器防火墙等等配置吧...
------解决方案--------------------
应该是服务器的防火墙挡住了
------解决方案--------------------
我试了一下,不能连接你222.11.22.33:81这个程序。socket连接不成功。80端口也不成功。
你是不是启用了DMZ主机?
------解决方案--------------------
你可以试着把你的iis监听81端口,试试外网能访问web不。如果OK的话,至少说明用81端口提供web服务时可以的。另外,你看看是不是你的防火墙的过滤规则问题,或者acl设置的问题。
------解决方案--------------------
另外,如果你是直接在路由器上做的端口转发,是允许了tcp还是UDP?另外,是电信的网络,商务领航?有的路由器在端口转发方面有bug?或者你可以根据你的路由器型号,到官网或者公网上查询有无最新程序升级。有无网友遇到过相同问题。