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();
    }
}
相关推荐
爱编程的鱼23 分钟前
OpenCV Python 绑定:原理与实战
c语言·开发语言·c++·python
这周也會开心30 分钟前
云服务器安装JDK、Tomcat、MySQL
java·服务器·tomcat
hrrrrb1 小时前
【Spring Security】Spring Security 概念
java·数据库·spring
小信丶1 小时前
Spring 中解决 “Could not autowire. There is more than one bean of type“ 错误
java·spring
sdgsdgdsgc1 小时前
Next.js企业级应用开发:SSR、ISR与性能监控方案
开发语言·前端·javascript
周杰伦_Jay2 小时前
【Java虚拟机(JVM)全面解析】从原理到面试实战、JVM故障处理、类加载、内存区域、垃圾回收
java·jvm
rit84324995 小时前
基于MATLAB的模糊图像复原
开发语言·matlab
fie88895 小时前
基于MATLAB的声呐图像特征提取与显示
开发语言·人工智能
程序员小凯6 小时前
Spring Boot测试框架详解
java·spring boot·后端
豐儀麟阁贵6 小时前
基本数据类型
java·算法