Java TCP网络编程:Socket与ServerSocket完整示例

16 下载量 30 浏览量 更新于2024-09-01 收藏 192KB PDF 举报
"Java网络编程中的TCP通信是一个重要的概念,主要涉及使用Socket和ServerSocket类进行客户端和服务器端的数据交换。TCP是一种可靠的、基于连接的传输层协议,确保数据的正确传输。本文将提供一个完整的Java TCP通信代码示例,包括客户端和服务器端的实现,以及TCP文件复制的应用场景。" 在Java网络编程中,TCP通信是通过Socket类和ServerSocket类来实现的。Socket代表客户端,用于与服务器建立连接并进行数据通信,而ServerSocket则在服务器端监听特定端口,等待客户端的连接请求。 TCP协议基础 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它在数据传输前会先建立连接,确保数据在传输过程中不会丢失或错乱。TCP通过序列号、确认应答和重传机制来保证数据的可靠性。在TCP通信中,数据被分割成多个数据段,每个数据段都有一个唯一的序列号,接收端根据序列号重组数据,如果未收到确认应答,发送端会重新发送数据段。 Socket类 Socket类是客户端TCP通信的核心,其构造函数允许指定服务器的IP地址和端口号,建立连接。例如: ```java Socket sockets = new Socket("127.0.0.1", 10001); ``` Socket类提供了输入输出流,可以用来读写数据。例如,`Socket.getInputStream()` 和 `Socket.getOutputStream()` 分别获取输入流和输出流,用于读取服务器的响应和发送数据到服务器。 ServerSocket类 ServerSocket类是服务器端的基石,用于监听特定端口的连接请求。如: ```java ServerSocket ss = new ServerSocket(10001); ``` 一旦有客户端连接,`ServerSocket.accept()` 方法会阻塞,直到有新的连接到来,然后返回一个新的Socket对象,用于与客户端进行通信。 TCP通信示例 以下是一个简单的TCP通信客户端和服务器端的代码片段: 客户端(ClientDemo): ```java public class ClientDemo { public static void main(String[] args) throws UnknownHostException, IOException { Socket socket = new Socket("127.0.0.1", 10001); // 发送数据 OutputStream os = socket.getOutputStream(); os.write("Hello, Server!".getBytes()); // 接收数据 InputStream is = socket.getInputStream(); byte[] buffer = new byte[1024]; int len = is.read(buffer); System.out.println(new String(buffer, 0, len)); // 关闭连接 os.close(); is.close(); socket.close(); } } ``` 服务器端(ServerDemo): ```java public class ServerDemo { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(10001); while (true) { Socket clientSocket = serverSocket.accept(); // 接收数据 InputStream is = clientSocket.getInputStream(); byte[] buffer = new byte[1024]; int len = is.read(buffer); System.out.println("Received: " + new String(buffer, 0, len)); // 发送数据 OutputStream os = clientSocket.getOutputStream(); os.write("Hello, Client!".getBytes()); // 关闭连接 os.close(); is.close(); clientSocket.close(); } } } ``` TCP文件复制 TCP还可以用于文件的复制。客户端读取本地文件,通过Socket发送到服务器端,服务器端接收到数据后写入到目标文件。这通常涉及使用大缓冲区和循环读写,以提高效率和避免频繁的小块数据传输。 Java中的TCP通信涉及Socket和ServerSocket的使用,通过它们可以构建出可靠的数据传输系统。无论是简单的文本交互,还是复杂的文件传输,TCP都能提供稳定的数据通道。