Java TCP练习1

TCPExercise1Send

java 复制代码
package TCPExercise120240817;

import java.io.*;
import java.net.Socket;

public class TCPExercise1Send {
    public static void main(String[] args) throws IOException {
        // 需求
        // 客户端:发送数据,接受服务器反馈
        // 服务器:收到消息后给出反馈

        // 案例分析
        // 客户端创建对象,使用输出流输出数据
        // 服务端创建对象,使用输入流接受数据
        // 服务端使用输出流给出反馈数据
        // 客户端使用输入流接受反馈数据

        // 客户端
        // 创建Socket
        Socket socket = new Socket("127.0.0.1", 10086);
        // 创建OutputStream对象
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        // 客户端输出数据
        bufferedWriter.write("你好,客户端");
        bufferedWriter.newLine();
        bufferedWriter.flush();
        // 关闭输出流
        socket.shutdownOutput();
        // 创建InputStream对象接收服务端反馈的数据
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            System.out.print(line);
        }

        // 此处关流
        bufferedReader.close();
        bufferedWriter.close();
        socket.close();

        // 注:十分重要!!!
        // 客户端发送数据后必须关闭输出流:在客户端发送数据后,应该关闭输出流,这样服务端才能正确读取到数据的结束标志
        // 服务端读取数据时要处理结束标志:服务端在读取数据时,如果客户端没有关闭输出流,readLine() 方法会一直等待,导致程序阻塞
    }
}

TCPExercise1Receive

java 复制代码
package TCPExercise120240817;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPExercise1Receive {
    public static void main(String[] args) throws IOException {
        // 服务端
        // 创建ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(10086);
        // 等待客户端连接
        Socket socket = serverSocket.accept();
        // 创建输入流对象
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        // 读取客户端发送的数据
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            System.out.print(line);
        }
        // 给客户端返回数据
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bufferedWriter.write("服务端已经收到信息");
        bufferedWriter.newLine();
        bufferedWriter.flush();
        // 关流
        bufferedWriter.close();
        bufferedReader.close();
        socket.close();
        serverSocket.close();
    }
}
相关推荐
Tigshop开源商城1 小时前
『物流设置+SEO优化』Tigshop开源商城系统 JAVA v5.8.26 版本更新!
java·开源商城系统·tigshop
坚果派·白晓明2 小时前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
花间相见3 小时前
【PaddleOCR教程01】PP-OCRv5 全面指南:从模型架构到实战部署
开发语言·r语言
爱学习 爱分享3 小时前
k8s 开启防火墙,容器内部无法访问外部 ip
tcp/ip·容器·kubernetes
发光小北3 小时前
Profinet 从站转 EtherNet/IP 从站网关如何应用?
网络·网络协议·tcp/ip
小短腿的代码世界3 小时前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
Tigshop开源商城3 小时前
『订单税率+收货地址校验国家字段』功能上新|跨境运营更高效,Tigshop开源商城系统 JAVA v5.8.23 版本更新
java·开源商城系统·tigshop
REDcker3 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
wangl_923 小时前
Modbus RTU 与 Modbus TCP 深入指南-Wireshark抓包分析实战
网络协议·tcp/ip·wireshark·tcp·modbus·rtu
kobesdu5 小时前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2