• 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
  • 相关阅读:
    蓝牙技术|AirPods Pro 2或将搭载运动传感器,TWS蓝牙耳机发展新方向
    RocketMQ—RocketMQ消费重试和死信消息
    模型部署——onnx定义、读写和调试
    Flink简介、基本原理、架构图
    ChatGPT基础(三) 让ChatGPT回答质量提高十倍的提示词模版
    【数学建模】灰色关联(Matlab代码实现)
    二分查找做的小游戏
    【贪心的商人】python实现-附ChatGPT解析
    Ubuntu安装git方法
    目标跟踪(1)SORT Windows实战+代码解析
  • 原文地址:https://blog.csdn.net/Yellow_python/article/details/127923727