Java网络编程:通过Socket读写数据

Java通过java.net包提供了强大的网络编程功能,其中Socket类是建立客户端与服务器连接的核心组件。本文将详细介绍如何使用Socket在Java中进行文本数据、二进制数据和序列化对象的读写,结合实例代码和注意事项,帮助开发者构建可靠的网络应用程序。

1. 文本数据的读写

1.1 概述

在网络编程中,文本数据是最常见的传输形式。Java通过BufferedReaderPrintWriter类处理字符流,适合传输字符串或文本消息。这些类基于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)建立与服务器的连接。
  • PrintWriternew PrintWriter(echoSocket.getOutputStream(), true)创建写入器,true启用自动刷新,确保数据立即发送。
  • BufferedReadernew BufferedReader(new InputStreamReader(echoSocket.getInputStream()))创建读取器,读取服务器响应。
  • 标准输入:通过BufferedReader从控制台读取用户输入。
  • 异常处理:使用try-with-resources确保资源正确关闭,捕获IOException处理连接错误。

运行该程序时,需确保Echo服务器在指定主机和端口运行。例如,运行命令:

java EchoClient localhost 7
注意事项:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面朝大海,春不暖,花不开

您的鼓励是我最大的创造动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值