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