• 使用Socket简单模拟C/S消息传递(TCP)——Java面向对象基础(31)


    1.socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。

    2.通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
    3.我们把插头插到插座上就能从电网获得电力供应,同样,为了与远程计算机进行数据传输,需要连接到因特网,而 socket 就是用来连接到因特网的工具。

    客户端

    public class MyClient {
        public static final String SERVER_LOCALHOST="127.0.0.1";
        //服务端的IP
        public static final int SERVER_PORT=8080;
        //服务端的端口
        public static void main(String[] args) throws Exception {
            //创建客户端的Socket对象,并且指定服务端的IP以及端口
            Socket socket=new Socket(SERVER_LOCALHOST,SERVER_PORT);
            //获取Socket输出流
            OutputStream os=socket.getOutputStream();
            //准备一句话
            String say="hello";
            //将字节流转换为字符流
            OutputStreamWriter osw=new OutputStreamWriter(os);
            //将字符流转换为字符缓冲流
            BufferedWriter bw=new BufferedWriter(osw);
            
            bw.write(say);
            bw.flush();
            //禁用Socket中的输出流
            socket.shutdownOutput();
            
            //获取Socket输入流
            InputStream is=socket.getInputStream();
            //将字节流转换为字符流
            InputStreamReader isr=new InputStreamReader(is);
            //将字符流转换为字符缓冲流
            BufferedReader br=new BufferedReader(isr);
            //读出
            String clientContent=br.readLine();
            System.out.println(clientContent);
            
            br.close();
            bw.close();
            socket.close();
            
        }
    }

    服务端

    public class MyServer {
        //服务端的端口
        public static final int SERVER_PORT=8080;
        public static void main(String[] args) throws Exception {
            //创建服务端Socket对象
            ServerSocket serverSocket=new ServerSocket(SERVER_PORT);
            //监听来自客户端的请求
            Socket socket=serverSocket.accept();
            //获取Socket输入流
            InputStream is=socket.getInputStream();
            //将字节流转换为字符流
            InputStreamReader isr=new InputStreamReader(is);
            //将字符流转换为字符缓冲流
            BufferedReader br=new BufferedReader(isr);
            //读出
            String clientContent=br.readLine();
            System.out.println(clientContent);
            
            //禁用Socket中的输入流
            socket.shutdownInput();
            
            //回复
            String responseSay="hellohello";
            OutputStream os=socket.getOutputStream();
            //将字节流转换为字符流
            OutputStreamWriter osw=new OutputStreamWriter(os);
            //将字符流转换为字符缓冲流
            BufferedWriter bw=new BufferedWriter(osw);
            //写入
            bw.write(responseSay);
            bw.flush();
            
            
            bw.close();
            br.close();
            socket.close();
            serverSocket.close();
        }
    }
  • 相关阅读:
    Spring Boot Admin 添加报警提醒和登录验证功能!
    安卓平板体验Java开发,还能白嫖一年阿里无影云,真香!
    Java中停止线程的3种方式
    Nacos中服务删除不了,怎么办?
    面试突击30:线程池是如何执行的?拒绝策略有哪些?
    面试突击25:sleep和wait有什么区别
    SpringCloud Nacos + Ribbon 调用服务的 2 种方法!
    为什么start方法不能重复调用?而run方法却可以?
    Spring Cloud Alibaba Nacos 服务注册与发现功能实现!
    多图|一文详解Nacos参数!
  • 原文地址:https://www.cnblogs.com/Unlimited-Rain/p/12570229.html
Copyright © 2020-2023  润新知