做项目时发现使用如下方法初始化socket的时候普遍要花4、5秒才能正常联通(前提该IP和端口完全正常能通)
Socket s = new Socket("10.13.3.10", Integer.parseInt(ip_port));后来网上去查了一下,发现是Java代码把10.13.3.10这个IP识别成主机名了,然后通过DNS又解析不到,超时之后才解析成IP所以花了5秒,提供的解决方法是修改windows的host文件我尝试了一下可行,但是这个项目最终是要给客户的,我不可能让客户也去修改Host文件啊,请问大家谁知道有什么通过改代码就能搞定的解决办法吗?PS:尝试了new Socket(InetAddress.getByAddress(byte[] addr) , int port)还是不行

解决方案 »

  1.   

    用这个构造函数:
    Socket(InetAddress address, int port) 
      

  2.   

    用这个
     
         InetAddress address = InetAddress.getByName("10.13.3.10");
    当这样构造InetAddress的时候,是不会去查找dns的,只有显示调用getHostName时,才会查找dns
    然后用socket(InetAddress,Port)试试
      

  3.   

    我运行多次,都是第一种反而比第二种费时间啊,为什么你的要花 5 秒钟,是不是网络慢啊,我 2M ADSL 连接 www.google.com :只跑一次是第一个结果,在循环里面连续10次连接。很理想啊。可能你的网络很慢吧。Elapsed :31 ms
    Elapsed :16 ms
    Elapsed :47 ms我跑循环 10 次得到:
    Elapsed :46 ms
    Elapsed :0 ms
    Elapsed :63 ms
    Elapsed :16 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :15 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :16 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :15 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :16 ms
    Elapsed :15 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :16 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :16 ms
    Elapsed :0 ms
    Elapsed :0 ms
    Elapsed :15 ms
    Elapsed :0 ms    public static void main(String[] args) throws Exception {
            for (int i = 0; i < 10; i++) {            {
                    long before = System.currentTimeMillis();                InetAddress address = InetAddress.getByAddress(new byte[] { 64,
                            (byte) 233, (byte) 189, (byte) 147 });                Socket socket = new Socket(address, 80);                long after = System.currentTimeMillis();                System.out.println("Elapsed :" + (after - before) + " ms");                socket.close();
                }            {
                    long before = System.currentTimeMillis();                Socket socket = new Socket("64.233.189.147", 80);                long after = System.currentTimeMillis();                System.out.println("Elapsed :" + (after - before) + " ms");                socket.close();
                }            {
                    long before = System.currentTimeMillis();                Socket socket = new Socket("www.google.com", 80);                long after = System.currentTimeMillis();                System.out.println("Elapsed :" + (after - before) + " ms");                socket.close();
                }
            }
        }
      

  4.   

    使用 JDK 1.4 和 JDK 1.6 没有什么差别,1. 最快:"64.233.189.147" 
    2. 其次:new byte[] { 64, (byte) 233, (byte) 189, (byte) 147 }
    3. 最慢:www.google.com.
      

  5.   

    原因可能跟我访问的是内网网段有关,也可能是我这边双网卡的关系吧,反正我在host文件里添加那个访问IP问题就解决了,不加就要4、5s,内网网络决定没问题,我去ping都很通畅