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();
    }
}
相关推荐
凡人的AI工具箱11 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
陈王卜14 分钟前
django+boostrap实现发布博客权限控制
java·前端·django
小码的头发丝、14 分钟前
Spring Boot 注解
java·spring boot
java亮小白199719 分钟前
Spring循环依赖如何解决的?
java·后端·spring
飞滕人生TYF25 分钟前
java Queue 详解
java·队列
chnming198727 分钟前
STL关联式容器之map
开发语言·c++
进击的六角龙29 分钟前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂29 分钟前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc36 分钟前
Python简介以及解释器安装(保姆级教学)
开发语言·python
程序伍六七40 分钟前
day16
开发语言·c++