Java网络编程疑问:TCP连接关闭示例
在Java中,我们使用Socket和ServerSocket类来实现TCP连接的创建、关闭等操作。以下是一个简单的TCP连接关闭示例:
- 客户端(主动关闭连接的一方):
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 1234);
OutputStream outputStream = socket.getOutputStream();
PrintWriter writer = new PrintWriter(outputStream, true))) {
// 发送请求
writer.println("Hello, Server!");
// 关闭连接
writer.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("Connection closed due to error.");
}
}
}
- 服务器端(被动关闭连接的一方):
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(1234);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)))) {
String receivedMessage = reader.readLine();
if (receivedMessage != null && receivedMessage.contains("Hello, Server!")) {
// 在这里处理接收到的消息
System.out.println("Message received: " + receivedMessage);
// 被动关闭连接(发送FIN包)
socket.getOutputStream().write(104); // 'A' character (Fin)
// 关闭连接输入流和读者
inputStream.close();
reader.close();
} else {
System.out.println("Invalid message received.");
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Connection closed due to error.");
}
}
}
这样,客户端主动关闭TCP连接,服务器端接收到FIN包后也关闭了连接。
还没有评论,来说两句吧...