• 记录socket的使用 | TCP/IP协议下服务器与客户端之间传送数据 | java学习笔记


    谨以此篇,记录TCP编程,方便日后查阅笔记

    注意:用BufferedWriter write完后,一定要flush;否则字符不会进入流中。去看源码可知:真正将字符写入的不是write(),而是flush()。

    服务器端代码:

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class theServer {
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket = new ServerSocket(9999); // 该行代码作用:让服务器监听9999端口
            Socket socket = serverSocket.accept();
    
            InputStream inputStream = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    //        byte[] bytes = new byte[1024];
    //        int readLine = 0;
    //        while ((readLine = inputStream.read(bytes)) != -1) {
    //            System.out.print(new String(bytes, 0, readLine));
    //        }
    //        socket.shutdownInput();
            String readStr = reader.readLine();
            System.out.println(readStr);
    
            OutputStream outputStream = socket.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
    //        outputStream.write("server: hi client".getBytes());
    //        socket.shutdownOutput(); // 结束标记,让对方(客户端)socket可以使用outputStream流
            writer.write("server: hi client");
            writer.newLine(); // 使用字符流的话,可以用“socket.shutdownInput()”作为结束标记,也可以用“writer.newLine()”作为结束标记;使用newLine作为结束标记,对应的,在读的时候需要使用readLine来读数据
            writer.flush(); // 用BufferedWriter write完后,一定要flush
    
            writer.close(); // 后打开的流,先关闭
            reader.close();
            socket.close();
            serverSocket.close(); // 先打开的流,后关闭
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    客户端代码:

    import java.io.*;
    import java.net.InetAddress;
    import java.net.Socket;
    
    public class theClient {
        public static void main(String[] args) throws IOException {
            Socket socket =  new Socket(InetAddress.getLocalHost(),9999); // 该行代码作用:让客户端连接到服务器的9999端口
    
            OutputStream outputStream = socket.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
    //        outputStream.write("client: hi server".getBytes());
            writer.write("client: hi server");
    //        socket.shutdownOutput(); // // 结束标记,让对方(服务器端)socket可以使用outputStream流
            writer.newLine(); // 使用字符流的话,可以用“writer.newLine()”作为结束标记
            writer.flush(); // 用BufferedWriter write完后,一定要flush
    
            InputStream inputStream = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    //        byte[] bytes = new byte[1024];
    //        int readLine = 0;
    //        while ((readLine = inputStream.read(bytes)) != -1) {
    //            System.out.print(new String(bytes, 0, readLine));
    //        }
    //        socket.shutdownInput();
            String readStr = reader.readLine();
            System.out.println(readStr);
    
            reader.close();
            writer.close();
            socket.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    运行后结果:

    服务器端:
    在这里插入图片描述
    客户端:
    在这里插入图片描述
    参考资料
    https://www.bilibili.com/video/BV1fh411y7R8?p=669&vd_source=07ed824bba84f399accbac1be9f9f505

  • 相关阅读:
    8086/8088 存储器分段概念
    对抗训练理论分析:自适应步长快速对抗训练
    CS5801 HDMI转4K 4lane_DP/eDP方案
    《机器学习》(周志华) 第5章 神经网络 学习心得 笔记
    Double 4 VR智能互动教学系统的教学应用
    k8s---基本架构--节点
    客户端发现pod并与之通信
    20221026,开启DevOps之路。冲击最大的是项目上或者功能的英文名词。现在记录如下
    护眼台灯是智商税吗?书客、飞利浦、南卡三款台灯真实测评
    网安学习-内网渗透4
  • 原文地址:https://blog.csdn.net/qq_44743895/article/details/132738854