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();
    }
}
相关推荐
Narutolxy几秒前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin
Hello.Reader8 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默19 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Cachel wood25 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Code哈哈笑28 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
gb421528731 分钟前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶31 分钟前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
qq_4336184434 分钟前
shell 编程(二)
开发语言·bash·shell
zfoo-framework39 分钟前
【jenkins插件】
java