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();
    }
}
相关推荐
秃头佛爷32 分钟前
Python学习大纲总结及注意事项
开发语言·python·学习
阿伟*rui33 分钟前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
待磨的钝刨34 分钟前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
幺零九零零2 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
XiaoLeisj3 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck3 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei3 小时前
java的类加载机制的学习
java·学习
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉4 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer4 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法