Java通过java.net
包提供了强大的网络编程功能,其中Socket
类是建立客户端与服务器连接的核心组件。本文将详细介绍如何使用Socket
在Java中进行文本数据、二进制数据和序列化对象的读写,结合实例代码和注意事项,帮助开发者构建可靠的网络应用程序。
1. 文本数据的读写
1.1 概述
在网络编程中,文本数据是最常见的传输形式。Java通过BufferedReader
和PrintWriter
类处理字符流,适合传输字符串或文本消息。这些类基于Socket
的输入和输出流构建,简化了文本数据的读写操作。
- BufferedReader:从输入流读取文本行,适合处理多行文本。
- PrintWriter:向输出流写入文本,支持自动刷新功能。
1.2 示例:Echo客户端
以下是一个Echo客户端程序,连接到Echo服务器(运行在端口7),发送用户输入的文本,并接收服务器的回显:
import java.io.*;
import java.net.*;
public class EchoClient {
public static void main(String[] args) throws IOException {
String hostName = args.length > 0 ? args[0] : "localhost";
int portNumber = 7;
try (
Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))
) {
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("回显: " + in.readLine());
}
} catch (IOException e) {
System.err.println("连接错误: " + e.getMessage());
}
}
}
代码解析:
- Socket创建:
new Socket(hostName, portNumber)
建立与服务器的连接。 - PrintWriter:
new PrintWriter(echoSocket.getOutputStream(), true)
创建写入器,true
启用自动刷新,确保数据立即发送。 - BufferedReader:
new BufferedReader(new InputStreamReader(echoSocket.getInputStream()))
创建读取器,读取服务器响应。 - 标准输入:通过
BufferedReader
从控制台读取用户输入。 - 异常处理:使用
try-with-resources
确保资源正确关闭,捕获IOException
处理连接错误。
运行该程序时,需确保Echo服务器在指定主机和端口运行。例如,运行命令:
java EchoClient localhost 7