在Socket通信中,可以设置Socket的超时时间,以避免由于网络原因导致的长时间阻塞。超时设置可以在以下两方面实现:
- 连接超时:Socket创建到建立连接的超时时间,使用Socket的connectTimeout属性设置。
- 读写超时: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超时时间可以用于:
- 避免长时间网络阻塞,提高程序响应性。
- 超时后进行重试或其他补救操作,提高程序健壮性。