• UDP通信:快速入门


    UDP协议通信模型演示

    UDP API

    DatagramPacket:数据包对象(韭菜盘子) 

    public DatagramPacket(byte[] buf, int length, InetAddress address, int port)创建发送端数据包对象 buf:要发送的内容,字节数组 length:要发送内容的字节长度 address:接收端的IP地址对象 port:接收端的端口号
    public DatagramPacket(byte[] buf, int length)创建接收端的数据包对象 buf:用来存储接收的内容 length:能够接收内容的长度
    public int getLength()获得实际接收到的字节个数

     DatagramSocket:发送端和接收端对象(人)

    public DatagramSocket()创建发送端的Socket对象,系统会随机分配一个端口号。
    public DatagramSocket(int port)创建接收端的Socket对象并指定端口号
    public void send(DatagramPacket dp)发送数据包
    public void receive(DatagramPacket p)接收数据包

    使用UDP通信实现:发送消息、接收消息

    客户端实现步骤

    创建DatagramSocket对象(发送端对象)                      扔韭菜的人

    创建DatagramPacket对象封装需要发送的数据(数据包对象)                 韭菜盘子

    使用DatagramSocket对象的send方法传入DatagramPacket对象                 开始抛出韭菜

    释放资源

    接收端实现步骤

    创建DatagramSocket对象并指定端口(接收端对象)                      接韭菜的人

    创建DatagramPacket对象接收数据(数据包对象)                 韭菜盘子

    使用DatagramSocket对象的receive方法传入DatagramPacket对象                 开始接收韭菜

    释放资源

    代码实现

    1. /**
    2. 发送端 一发 一收
    3. */
    4. public class ClientDemo1 {
    5. public static void main(String[] args) throws Exception {
    6. System.out.println("=====客户端启动======");
    7. // 1、创建发送端对象:发送端自带默认的端口号(人)
    8. DatagramSocket socket = new DatagramSocket(6666);
    9. // 2、创建一个数据包对象封装数据(韭菜盘子)
    10. /**
    11. public DatagramPacket(byte buf[], int length,
    12. InetAddress address, int port)
    13. 参数一:封装要发送的数据(韭菜)
    14. 参数二:发送数据的大小
    15. 参数三:服务端的主机IP地址
    16. 参数四:服务端的端口
    17. */
    18. byte[] buffer = "我是一颗快乐的韭菜,你愿意吃吗?".getBytes();
    19. DatagramPacket packet = new DatagramPacket( buffer, buffer.length,
    20. InetAddress.getLocalHost() , 8888);
    21. // 3、发送数据出去
    22. socket.send(packet);
    23. socket.close();
    24. }
    25. }
    1. /**
    2. 接收端
    3. */
    4. public class ServerDemo2 {
    5. public static void main(String[] args) throws Exception {
    6. System.out.println("=====服务端启动======");
    7. // 1、创建接收端对象:注册端口(人)
    8. DatagramSocket socket = new DatagramSocket(8888);
    9. // 2、创建一个数据包对象接收数据(韭菜盘子)
    10. byte[] buffer = new byte[1024 * 64];
    11. DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
    12. // 3、等待接收数据。
    13. socket.receive(packet);
    14. // 4、取出数据即可
    15. // 读取多少倒出多少
    16. int len = packet.getLength();
    17. String rs = new String(buffer,0, len);
    18. System.out.println("收到了:" + rs);
    19. // 获取发送端的ip和端口
    20. String ip =packet.getSocketAddress().toString();
    21. System.out.println("对方地址:" + ip);
    22. int port = packet.getPort();
    23. System.out.println("对方端口:" + port);
    24. socket.close();
    25. }
    26. }

  • 相关阅读:
    JS逆向实战27——pdd的anti_content 分析与逆向
    [Mongodb 5.0]比较运算符
    【Spring源码】10. 递归调用的processConfigurationClass()方法
    MySQL数据库 主从复制与读写分离
    node深度打印对象
    TCP三次握手,四次挥手策略
    [PAT练级笔记] 21 Basic Level 1021 个位数统计
    游戏工作室为什么要使用海外住宅IP防封?
    垃圾收集器
    强固型工业电脑在称重系统+叉车电脑,称重量体扫码一体机,物流分拣线工作站行业应用
  • 原文地址:https://blog.csdn.net/daqi1983/article/details/133787614