Java Socket网络编程实战:字符流打造TCP通信示例
Java Socket网络编程实战:字符流打造TCP通信示例
本文将带领你使用Java编写一个简单的网络应用程序,利用字符流实现客户端和服务器之间的数据传输,并讲解网络编程中的核心概念,如Socket、TCP和UDP。
代码示例
**1. 服务器端代码:**javaimport java.io.;import java.net.;
public class NetworkProgrammingExample { public static void main(String[] args) { try { // 创建一个ServerSocket对象,监听指定端口号 ServerSocket serverSocket = new ServerSocket(1234); System.out.println('服务器已启动,等待客户端连接...');
// 等待客户端连接 Socket socket = serverSocket.accept(); System.out.println('客户端已连接');
// 获取输入流,用于接收客户端发送的数据 BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 获取输出流,用于向客户端发送数据 PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
// 读取客户端发送的数据 String message = reader.readLine(); System.out.println('接收到客户端的数据:' + message);
// 向客户端发送数据 writer.println('Hello, Client!');
// 关闭连接 reader.close(); writer.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } }}
这段代码创建了一个服务器,监听本地端口1234,等待客户端连接。一旦客户端连接成功,服务器将接收客户端发送的一条消息,并向客户端回复一条消息。
**2. 客户端代码:**javaimport java.io.;import java.net.;
public class NetworkClientExample { public static void main(String[] args) { try { // 创建一个Socket对象,连接到服务器的指定IP地址和端口号 Socket socket = new Socket('localhost', 1234);
// 获取输入流,用于接收服务器发送的数据 BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 获取输出流,用于向服务器发送数据 PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
// 向服务器发送数据 writer.println('Hello, Server!');
// 读取服务器发送的数据 String message = reader.readLine(); System.out.println('接收到服务器的数据:' + message);
// 关闭连接 reader.close(); writer.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } }}
这段代码创建了一个客户端,连接到本机地址 'localhost' 的端口1234,也就是上面服务器监听的端口。客户端会向服务器发送一条消息,并接收服务器的回复。
核心概念解读
- Socket (套接字): 网络通信的端点,可以理解为两个应用程序进行通信的连接点。* TCP (传输控制协议): 一种面向连接的、可靠的传输层协议,确保数据包按顺序、无差错地到达目标。* UDP (用户数据报协议): 一种无连接的、不可靠的传输层协议,数据包可能丢失或乱序,但效率较高。
总结
本文提供了一个简单的Java Socket网络编程示例,演示了如何使用字符流进行TCP通信。实际应用中,网络程序需要处理更复杂的逻辑和数据交互,但本文提供的代码和概念解释可以作为你学习网络编程的入门指南。
原文地址: https://www.cveoy.top/t/topic/fOQE 著作权归作者所有。请勿转载和采集!