在Socket编程中,可以通过以下方式设置连接的超时时间:
1、 为Socket对象设置超时时间:
- 使用socket.setSoTimeout(int)设置以毫秒为单位的超时时间。
- 超时后会抛出SocketTimeoutException。
Socket socket = new Socket("127.0.0.1", 8000);
socket.setSoTimeout(1000); // 设置1s超时时间
try {
InputStream in = socket.getInputStream();
byte[] buffer = new byte[1024];
in.read(buffer); // 如果在1s内未读取到字节,会超时
} catch (SocketTimeoutException e) {
e.printStackTrace();
}
2、 为ServerSocket对象设置超时时间:
- 使用serverSocket.setSoTimeout(int)设置以毫秒为单位的超时时间。
- 超时后accept()方法会抛出SocketTimeoutException。
ServerSocket server = new ServerSocket(8000);
server.setSoTimeout(1000); // 设置1s超时时间
try {
Socket socket = server.accept(); // 如果在1s内没有客户端连接,会超时
} catch (SocketTimeoutException e) {
e.printStackTrace();
}
3、 为DatagramSocket对象设置超时时间:
- 使用socket.setSoTimeout(int)设置以毫秒为单位的超时时间。
- 超时后receive()方法会抛出SocketTimeoutException。
DatagramSocket socket = new DatagramSocket(8000);
socket.setSoTimeout(1000); // 设置1s超时时间
try {
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet); // 如果在1s内没有数据报到达,会超时
} catch (SocketTimeoutException e) {
e.printStackTrace();
}
总之,通过设置超时时间,可以使网络程序具有更高的健壮性。如果在规定时间内未能完成网络操作,程序不会无限期地阻塞等待,而是抛出异常,供应用层程序员作出相应处理。