TCP network communication programming character stream

【Case 1】

[Title description]

【 Precautions】

(3 messages) Node stream and processing stream character processing stream BufferedReader, BufferedWriter, byte processing stream-BufferedInputStream and BufferedOutputStream (the codes are correct and runnable_Studying~'s blog-CSDN blog

1. Here you need to use a character processing stream to convert the byte stream into a character stream. The character stream used, so be sure to use writer.flush for manual refresh, otherwise the data cannot be written to the data channel. Then you only need to close the outer flow when using it.

2. Because a character stream is used here, the end mark can be changed to writer.newLine();, but in this case, the receiving data end must use reder.readLine();

[Server code]

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

/**
 * @ProjectName: Study
 * @FileName: SocketTCP02Server
 * @author:HWJ
 * @Data: 2023/7/29 11:50
 */
public class SocketTCP03Server {
    public static void main(String[] args) throws IOException {

        // 监听本机端口9999,等待连接
        // 细节:要求在本机没有其他服务在监听9999端口
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务端,在9999端口监听,等待连接");
        // 当没有客户端连接9999端口时,程序会阻塞,等待连接
        // 如果有客户端连接,则会返回Socket对象,程序继续
        Socket socket = serverSocket.accept();

        // 通过socket.getInputStream() 读取客户端写入到数据通道的数据,显示
        InputStream inputStream = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

        // 读取数据
        String str = reader.readLine();
        System.out.println(str);

        // 发送给客户端
        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
        writer.write("hello, client");
        writer.newLine(); // 插入一个换行符,表示写入的内容结束,注意,要求对方使用readLine()!!!
        writer.flush(); // 如果使用的字符流,需要手动刷新,否则数据不会写入数据通道

        // 这里一定要关闭流对象和socket,serverSocket对象,否则会造成资源浪费。
        serverSocket.close();
        socket.close();
        reader.close();
        writer.close();
        System.out.println("服务端退出...");
    }
}

【Client code】

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

/**
 * @ProjectName: Study
 * @FileName: SocketTCP02Client
 * @author:HWJ
 * @Data: 2023/7/29 11:50
 */
public class SocketTCP03Client {
    public static void main(String[] args) throws IOException {

        // 连接本机的 9999端口,如果连接成功,返回Socket对象
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("连接成功...");

        // 连接上后,生成Socket对象,通过socket.getOutputStream 来写入数据
        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
        writer.write("hello, server");
        writer.newLine(); // 插入一个换行符,表示写入的内容结束,注意,要求对方使用readLine()!!!
        writer.flush(); // 如果使用的字符流,需要手动刷新,否则数据不会写入数据通道

        // 通过socket.getInputStream() 读取客户端写入到数据通道的数据,显示
        InputStream inputStream = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

        // 读取数据
        String str = reader.readLine();
        System.out.println(str);

        // 这里一定要关闭流对象和socket对象,否则会造成资源浪费。
        socket.close();
        reader.close(); // 只需要关闭外层流即可
        writer.close();
        reader.close();
        System.out.println("客户端退出...");

    }
}

【Result display】

 

 

Guess you like

Origin blog.csdn.net/weixin_73936404/article/details/131995043