• Socket网络编程练习题二:客户端发送一条数据,接收服务端反馈的消息并打印;服务端接收数据并打印,再给客户端反馈消息


    题目

    • 客户端:发送一条数据,接收服务端反馈的消息并打印
    • 服务端:接收数据并打印,再给客户端反馈消息

    代码实战

    1、客户端代码

    package com.hidata.hiops.paas.demo;
    
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.Socket;
    
    /**
     * @Description : 客户端
     * @Date: 2023-09-27 10:08
     */
    public class Client {
        public static void main(String[] args) throws IOException {
            //创建Socket客户端对象并连接服务端
            Socket socket = new Socket("127.0.0.1",10001);
    
            //获取输出流
            OutputStream ops = socket.getOutputStream();
            String str = "你好,服务端";
            ops.write(str.getBytes());
    
            //给服务器写一个结束标记
            socket.shutdownOutput();
            
             //接收服务端回写的数据
            InputStreamReader isr = new InputStreamReader(socket.getInputStream());
            int b;
            while ((b = isr.read()) != -1){
                System.out.print((char)b);
            }
    
            //释放资源
            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
    • 34
    • 35
    • 36

    2、服务端代码

    package com.hidata.hiops.paas.demo;

    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    /**

    • @Description :服务端

    • @Date: 2023-09-27 10:16
      */
      public class Server {
      public static void main(String[] args) throws IOException {

       //创建服务端对象并绑定端口10001
       ServerSocket serverSocket = new ServerSocket(10001);
      
       //等待客户端来连接
       Socket socket = serverSocket.accept();
      
       //读取数据
       InputStreamReader isr = new InputStreamReader(socket.getInputStream());
       int b;
       while ((b = isr.read()) != -1){
           System.out.print((char)b);
       }
      
       //回写给客户端
       OutputStream ops = socket.getOutputStream();
       ops.write("我收到你的问候咯,你好 客户端!".getBytes());
      
       //释放资源
       socket.close();
       serverSocket.close();
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20

      }
      }

    3、运行结果

    客户端运行结果

    我收到你的问候咯,你好 客户端!
    Process finished with exit code 0
    
    • 1
    • 2

    服务端运行结果

    你好,服务端
    Process finished with exit code 0
    
    • 1
    • 2

    总结

    本练习题的核心之处在于:客户端在接收服务端反馈的消息之前,要加上 这句代码

    socket.shutdownOutput();
    
    • 1

    表示 给服务端加一个标记,告诉服务端,客户端这边的数据已经写完了,否则服务端程序会一直停在read方法这里,等待读取下面的数据

     while ((b = isr.read()) != -1){
       System.out.print((char)b);
     }
    
    • 1
    • 2
    • 3
  • 相关阅读:
    vue模板语法(下)
    神经网络训练准确率不变,神经网络越训练越差
    如何优雅的使用 IDEA Debug 进行调试
    java毕业设计大学生备考平台Mybatis+系统+数据库+调试部署
    蓝桥杯嵌入式基础模块——LCD显示器的基本使用(新板)STM32G431(HAL库开发)
    【软件测试】03 -- 软件测试概述
    Uni-ControlNet: All-in-One Control toText-to-Image Diffusion Models——【论文笔记】
    flutte: 可滚动列表
    说说对Fiber架构的理解?解决了什么问题?
    css修改滚动条
  • 原文地址:https://blog.csdn.net/weixin_43860634/article/details/133349385