如何实现Socket的超时设置?

在Socket通信中,可以设置Socket的超时时间,以避免由于网络原因导致的长时间阻塞。超时设置可以在以下两方面实现:

  1. 连接超时:Socket创建到建立连接的超时时间,使用Socket的connectTimeout属性设置。
  2. 读写超时:Socket读写操作的超时时间,使用Socket的setSoTimeout()方法设置。
    连接超时示例:
Socket socket = new Socket();
socket.connect(new InetSocketAddress("example.com", 8080), 5000); // 连接超时5秒

读写超时示例:

Socket socket = new Socket("example.com", 8080);
socket.setSoTimeout(5000);  // 读写超时5秒
InputStream in = socket.getInputStream();  
in.read(byteArray);  // 如果5秒内无数据可读,此方法抛出SocketTimeoutException

当Socket在指定时间内未能完成连接或读写操作时,会抛出SocketTimeoutException。我们可以捕获此异常,进行重试或其他操作。
例如:

try {
    Socket socket = new Socket();
    socket.connect(new InetSocketAddress("example.com", 8080), 5000); 
} catch (SocketTimeoutException e) {
    System.out.println("连接超时!");
    // 进行重试或其他操作
}

所以,设置Socket超时时间可以用于:

  1. 避免长时间网络阻塞,提高程序响应性。
  2. 超时后进行重试或其他补救操作,提高程序健壮性。