• Python工程师Java之路(v)Socket极简代码


    概述

    • Client/Server结构:客户端和服务器结构
    • TCP
      传输控制协议(Transmission Control Protocol)
      可靠的连接
    • UDP
      用户数据报协议(User Datagram Protocol)
      发送端发出数据时,不会确认接收端是否存在;接收端接收数据时,不会向发送端反馈是否收到
      网络传输的基本单位 :数据报(Datagram)

    TCP

    服务端

    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
        public static void main(String[] args)throws Exception {
            //1、创建ServerSocket对象,绑定端口
            ServerSocket server =  new ServerSocket(5000);
    
            //2、监听客户端的连接
            Socket socket = server.accept();
            //上面方法是阻塞的,如果没有客户端连接,就一直等待
            System.out.println("有客户端连进");
    
            //3、接收客户端的数据
            InputStream inputStream = socket.getInputStream();
            byte[] bytes = new byte[1024];
            StringBuilder stringBuilder = new StringBuilder();
            int len;
            while ((len = inputStream.read(bytes)) != -1) {
                stringBuilder.append(new String(bytes, 0, len));
            }
            System.out.println("接收到客户端发送的消息:" + stringBuilder);
    
            //4、关闭socket,不再与该客户端通信
            socket.close();
    
            //5、关闭ServerSocket
            server.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

    客户端

    import java.io.OutputStream;
    import java.net.Socket;
    
    public class Client {
        public static void main(String[] args) throws Exception {
            //1、准备Socket,连接服务器,需要指定服务器的IP地址和端口号
            Socket socket = new Socket("localhost", 5000);
    
            //2、向服务端发送数据
            OutputStream out = socket.getOutputStream();
            out.write("Python".getBytes());
            socket.shutdownOutput();
    
            //3、关闭socket,断开与服务器的连接
            socket.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    UDP

    接收端

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    public class Receiver {
        public static void main(String[] args) throws Exception {
            //1、创建数据报套接字,绑定5000端口号
            DatagramSocket ds = new DatagramSocket(5000);
    
            //2、创建数据报包
            byte[] bytes = new byte[1024 * 64];
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
    
            //3、套接字接受包
            ds.receive(dp);
    
            //4、拆封数据
            String str = new String(bytes, 0, dp.getLength());
            System.out.println(str);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    发送端

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    public class Sender {
        public static void main(String[] args) throws Exception {
            //1、创建数据报套接字
            DatagramSocket ds = new DatagramSocket();
    
            //2、创建数据报包
            byte[] bytes = "Python".getBytes();
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("localhost"), 5000);
    
            //3、发送数据报包
            ds.send(dp);
    
            //4、关闭套接字
            ds.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    Python每日一练(牛客网新题库)——第10天:从入门到实践四十招
    第9.3关 指针与字符串
    C程序设计(第五版) 第一章节 程序设计和C语言
    python开发环境搭建——pycharm和jupyternotebook
    容器是什么?
    DNS(Domain Name System) in detail
    【编程题】【Scratch二级】2019.09 绘制雪花图案
    OPPO发布AndesGPT大模型;Emu Video和Emu Edit的新突破
    十四、【VUE-CLI】配置代理服务器
    uniapp微信小程序电子签名
  • 原文地址:https://blog.csdn.net/Yellow_python/article/details/127923727