UDP通信程序

UDP通信原理

  • 概述
    用户数据报协议(User Datagram Protocol)是一种无连接的传输协议,它在通信两端各建立一个Socket对象,用于发送和接收数据。不区分客户端与服务器。
    在这里插入图片描述
  • java提供的基于UDP协议的 Socket 类
    DatagramSocket

DatagramSocket 与 DatagramPacket

  • 概述
    DatagramSocket:数据报套接字;套接字是不同主机间的进程进行双间通信的端点,由一个IP地址和端口号组成。(数据包裹收发站)

    DatagramPacket:数据报包;数据报包将数据打包成包裹,并贴上地址和门牌号(IP和端口),然后就可以交给socket发送出去了。

  • DatagramSocket

    构造方法 描述
    DatagramSocket() 构造一个数据报套接字并将其绑定到本地主机上的任何可用端口。
    DatagramSocket​(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。
    常用方法 描述
    void send​(DatagramPacket p) 从此套接字发送数据报包
    void receive​(DatagramPacket p) 从此套接字接收数据报包
    void close() 关闭此数据报套接字
  • DatagramPacket

    构造方法 描述
    DatagramPacket​(byte[] buf, int length, InetAddress address, int port) 构造一个长度为length的数据包buf并明确指定主机的指定端口号
    DatagramPacket​(byte[] buf, int length) 构造 DatagramPacket用于接收长度为 length数据包buf
    常用方法 描述
    InetAddress getAddress() 返回发送这个包的计算机IP地址
    int getPort() 返回发送这个包的计算机端口号
    SocketAddress getSocketAddress() 返回发送这个包的计算机IP地址和端口
    int getLength() 返回要发送的数据的长度或接收的数据的长度
    byte[] getData() 返回这个包数据缓冲区
    int getOffset() 返回要发送的数据的偏移量或接收数据的偏移量
    void set***() 所有的get()方法都有对应的set()方法

发送端 与 接收端

  • 发送端

    public class SendDemo {
         
        public static void main(String[] args) throws IOException {
         
            //创建数据包裹收发器,并绑定指定端口
            DatagramSocket ds = new DatagramSocket(12344);
            //创建数据包裹并放入数据
            byte[] bs = "hello UDP".getBytes();
            DatagramPacket dp =
                        new DatagramPacket(bs, bs.length, InetAddress.getByName("192.168.200.10"), 12345);
            //发送数据包裹
            ds.send(dp);
            //关闭收发器
            ds.close();
        }
    }
    
  • 接收端

    public class ReceiveDemo {
         
        public static void main(String[] args) throws IOException {
         
            //创建数据包裹收发器,并绑定指定端口
            DatagramSocket ds = new DatagramSocket(12345);
            //创建数据包裹用于接收数据
            byte[] bs = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bs, bs.length);
            //收数据包裹。程序运行到这里会等待发送包裹过来
            ds.receive(dp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值