Java I/O 流与网络通信的结合使用
理解 I/O 流
I/O (输入/输出) 流是 Java 中用于从设备或网络读取和写入数据的抽象。它们提供了标准的可移植机制来处理不同的数据源。
理解网络通信
Java 提供了一个健壮的 API 用于网络通信,包括创建套接字、发送和接收数据。Socket 类是网络通信的核心,它表示与远程计算机的连接。
结合使用 I/O 流和网络通信
I/O 流和网络通信可以集成在一起,通过网络实现数据交互。以下是具体步骤:
- 创建一个 Socket,建立与远程计算机的连接。
- 获取 Socket 的输入流 (InputStream) 和输出流 (OutputStream)。
- 使用输入流从 Socket 中读取数据,就像从文件或控制台中读取数据一样。
- 使用输出流将数据写入 Socket,就像写入文件或控制台一样。
实战案例
以下是一个用 Java 实现的客户端-服务器聊天应用程序,演示了 I/O 流和网络通信的结合使用:
客户端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
String hostname = "localhost";
int port = 5000;
try (Socket socket = new Socket(hostname, port);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream())) {
// 发送消息到服务器
out.println("Hello from client!");
// 读取服务器响应
String serverResponse = in.readLine();
System.out.println("Received from server: " + serverResponse);
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
int port = 5000;
try (ServerSocket serverSocket = new ServerSocket(port);
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream())) {
// 读取客户端消息
String clientMessage = in.readLine();
System.out.println("Received from client: " + clientMessage);
// 发送响应到客户端
out.println("Hello from server!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行
- 启动服务器:
java Server
- 启动客户端:
java Client