package org.example;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class client {
public static void main(String[] args) throws IOException {
final Socket socket = new Socket();
long t1 = System.currentTimeMillis();
try {
// 默认连接超时时间为0,也就是不会超时,但是socket是基于tcp的,tcp会超时
// 注意这里的ip地址是随意写的,不能连接的ip
socket.connect(new InetSocketAddress("192.168.0.135", 8888));
} finally {
System.out.println(System.currentTimeMillis() - t1);
}
}
}
21006
Exception in thread "main" java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
at java.net.Socket.connect(Socket.java:606)
at java.net.Socket.connect(Socket.java:555)
at org.example.client.main(client.java:13)
设置连接超时时间
package org.example;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class client {
public static void main(String[] args) throws IOException {
final Socket socket = new Socket();
long t1 = System.currentTimeMillis();
try {
//设置超时时间
// 注意这里的ip地址是随意写的,不能连接的ip
socket.connect(new InetSocketAddress("192.168.0.135", 8888), 10000);
} finally {
System.out.println(System.currentTimeMillis() - t1);
}
}
}
10003
Exception in thread "main" java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
at java.net.Socket.connect(Socket.java:606)
at org.example.client.main(client.java:14)
如果设置为socket.connect(new InetSocketAddress("192.168.0.135", 8888), 50000);
21017
Exception in thread "main" java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
at java.net.Socket.connect(Socket.java:606)
at org.example.client.main(client.java:14)
总结:客户端设置连接超时,TCP本身也有连接超时时间,不同版本TCP可能不同,如果设置的超时时间小于TCP的超时时间起作用,否则就是TCP的超时时间。