• 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
  • 相关阅读:
    简述快速失败(fail-fast)和安全失败(fail-safe)的区别 ?
    【前端验证】验证自动化脚本的最后一块拼图补全——gen_tb
    Java自学的话怎么样最有效果?
    密码正确无法登陆Linux系统
    centos7.9编译安装libzip-1.9.2 和 cmake 3.23.0
    TiUP 命令概览
    【教程】AWD中如何通过Python批量快速管理服务器?
    【分类网络】VGG
    跳动的爱心(可改颜色)
    第四百四十四回
  • 原文地址:https://blog.csdn.net/weixin_43860634/article/details/133349385