代码实现
服务端代码实现
服务端需要监听指定端口,等待客户端连接,接收客户端消息并回复。
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException {
// 创建ServerSocket对象,绑定端口8888
ServerSocket serverSocket = new ServerSocket(8888);
// 等待客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端已连接");
// 获取输入流,读取客户端发送的数据
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = in.readLine();
System.out.println("收到客户端消息:" + message);
// 获取输出流,向客户端发送数据
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("服务器已收到你的消息");
// 关闭资源
in.close();
out.close();
socket.close();
serverSocket.close();
}
}
客户端代码实现
客户端需要连接服务端,发送消息并接收服务端回复。
import java.io.*;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException {
// 创建Socket对象,连接服务器
Socket socket = new Socket("localhost", 8888);
// 获取输出流,向服务器发送数据
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("你好,服务器");
// 获取输入流,读取服务器返回的数据
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String response = in.readLine();
System.out.println("收到服务器回复:" + response);
// 关闭资源
out.close();
in.close();
socket.close();
}
}
实现思路
服务端启动后监听指定端口,通过accept()
方法阻塞等待客户端连接。客户端通过指定IP和端口连接服务端。连接建立后,双方通过输入输出流进行通信。
服务端使用BufferedReader
读取客户端发送的消息,使用PrintWriter
发送回复。客户端同样使用PrintWriter
发送消息,BufferedReader
接收回复。通信完成后,双方关闭连接释放资源。
总结
TCP通信需要服务端和客户端建立连接后进行数据传输。服务端通过ServerSocket
监听端口,客户端通过Socket
连接服务端。双方通过输入输出流实现数据交换,通信完成后需关闭连接。这种一发一收模式是TCP通信的基础,可扩展为持续通信或多客户端处理。