一、TCP超时重传机制简介
TCP超时重传机制是指当发送端发送数据后,如果在一定时间内未收到接收端的确认应答,则会认为数据丢失或损坏,从而触发重传机制。发送端会重新发送数据,并等待确认应答。如果在多次重传后仍未收到确认应答,则会放弃发送,并报告连接异常。
二、Java中的TCP超时重传机制示例
下面通过一个简单的Java示例来演示TCP超时重传机制的工作原理。我们将创建一个TCP服务器和客户端,客户端向服务器发送数据,但模拟了服务器未响应的情况,从而触发超时重传。
TCP服务器代码
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("Server started. Waiting for client connection...");
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket);
// 模拟服务器未响应,不发送任何数据
clientSocket.close();
serverSocket.close();
}
}
TCP客户端代码
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws IOException {
String serverHostname = "127.0.0.1";
int serverPort = 8888;
Socket socket = new Socket(serverHostname, serverPort);
socket.setSoTimeout(3000); // 设置超时时间为3秒
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
try {
// 向服务器发送数据
out.println("Hello, server!");
// 接收服务器的响应
String response = in.readLine();
System.out.println("Server response: " + response);
} catch (SocketTimeoutException e) {
System.out.println("Timeout! Server did not respond within 3 seconds.");
}
socket.close();
}
}
在这个示例中,客户端向服务器发送数据,但服务器未响应,超时时间设置为3秒。当超过3秒未收到服务器的响应时,客户端会捕获到SocketTimeoutException异常,并输出超时提示信息。