代码运行到new Socket("...",...);停了很久,然后就报超时错误了。主机的IP是可以ping通的。
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:464)
at java.net.Socket.connect(Socket.java:414)
at java.net.Socket.<init>(Socket.java:310)
at java.net.Socket.<init>(Socket.java:125)
at cmpp.Testapp.Run(Testapp.java:38)
at cmpp.Testapp.main(Testapp.java:69)

解决方案 »

  1.   

    socket.setSoTimeout(int   timeout);   
      一个自然的处理思路是采用超时机制。在java.net.socket中很容易找到超时控制选项SO_TIMEOUT,通过SetSoTimeout()方法便可以指定一个由系统设计者规定的时间间隔,程序员只需要简单地设置一个例外捕获处理代码即可
      

  2.   


            /**
     * connect to server
     * @param the hostname, the server's listening port 
     * */
    private boolean connectTo(String hostName, int port) throws IOException
    {
    boolean result = false;
    //displayMessage( "Attempting connection" );

    //create socket to make connection to server
    applet = new Socket();
    try
    {
    //InetSocketAddress is the subclass of abstruct class SocketAddress
    InetSocketAddress inetSocketAddress = new InetSocketAddress( 
         InetAddress.getByName( hostName ), port );
            //if > 60 seconds, then close
            applet.connect( inetSocketAddress, 60000 );
        
            //display connection information
    //displayMessage( "Connect to: " + applet.getInetAddress().getHostName() );

    result = true;
    }
    catch(SocketTimeoutException e) 
    {
         System.out.println( "Cannot connect ..." );
    }
    catch(Exception e) 
    {
    System.out.println( e );
    }

    return result;
    }
      

  3.   

    用inetSocketAddress,像我以上写的那样