UDP协议

接收端

  1. 使用DatagramSocket指定端口 创建接收端
  2. 准备容器 封装成DatagramPacket包裹
  3. 阻塞式接受包裹receive(DatagramPacket p)
  4. 分析数据 ( byte[] getData() getLength() )
  5. 释放资源
public class UdpService {
    public static void main(String[] args) throws IOException {
        System.out.println("接受方启动中");
//        1、使用DatagramSocket指定端口 创建接收端
        DatagramSocket service = new DatagramSocket(9999);
//      2、准备容器 封装成DatagramPacket包裹
        byte[] container = new byte[1024*60];
        DatagramPacket packet = new DatagramPacket(container,0,container.length);
// 3、阻塞式接受包裹receive(DatagramPacket p)
        service.receive(packet);
// 4、分析数据
//         byte[] getData()
//         getLength()
        byte[] datas = packet.getData();
        System.out.println(new String(datas));
//                * 5、释放资源
        service.close();
    }
}

发送端

  1. 使用DatagramSocket指定端口 创建发收端
  2. 准备数据 一定转成字节数组
  3. 封装成DatagramPacket包裹,需要指定目的地
  4. 发送包裹send(DatagramPacket p)
  5. 释放资源
public class UdpClient {
   public static void main(String[] args) throws IOException {
       System.out.println("发送方启动中");
//        1、使用DatagramSocket指定端口 创建接收端
       DatagramSocket client = new DatagramSocket(8888);
//        2、准备数据 一定转成字节数组
       String data = "你好啊";
       byte[] datas = data.getBytes();
//        3、封装成DatagramPacket包裹,需要指定目的地
       DatagramPacket packet = new DatagramPacket(datas,0,datas.length,
               new InetSocketAddress("localhost",9999));
//        4、发送包裹send(DatagramPacket p)
       client.send(packet);
//        5、释放资源
       client.close();
   }
}

DatagramSocket:用于发送或接收数据包的套接字
DatagramPacket:数据包

接收发送其他类型数据

/**
 * 发送端
 * 1、使用DatagramSocket指定端口 创建发收端
 * 2、将基本类型转成字节数组
 * 3、封装成DatagramPacket包裹,需要指定目的地
 * 4、发送包裹send(DatagramPacket p)
 * 5、释放资源
 */
public class UdpTypeClient {
    public static void main(String[] args) throws IOException {
        System.out.println("发送方启动中");
//        1、使用DatagramSocket指定端口 创建接收端
        DatagramSocket client = new DatagramSocket(8888);
//        2、将基本类型转成字节数组
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(baos));
        //操作数据类型+数据
        dos.writeUTF("你好");
        dos.writeInt(18);
        dos.writeBoolean(false);
        dos.writeChar('a');
        dos.flush();
        byte[] datas = baos.toByteArray();

//        3、封装成DatagramPacket包裹,需要指定目的地
        DatagramPacket packet = new DatagramPacket(datas,0,datas.length,
                new InetSocketAddress("localhost",9999));
//        4、发送包裹send(DatagramPacket p)
        client.send(packet);
//        5、释放资源
        client.close();
    }
}

/**
 * 接收端
 * 1、使用DatagramSocket指定端口 创建接收端
 * 2、准备容器 封装成DatagramPacket包裹
 * 3、阻塞式接受包裹receive(DatagramPacket p)
 * 4、分析数据 将字节数组还原为对应的类型即可
 *      byte[] getData()
 *             getLength()
 * 5、释放资源
 */
public class UdpTypeService {
    public static void main(String[] args) throws IOException {
        System.out.println("接受方启动中");
//        1、使用DatagramSocket指定端口 创建接收端
        DatagramSocket service = new DatagramSocket(9999);
//      2、准备容器 封装成DatagramPacket包裹
        byte[] container = new byte[1024*60];
        DatagramPacket packet = new DatagramPacket(container,0,container.length);
// 3、阻塞式接受包裹receive(DatagramPacket p)
        service.receive(packet);
// 4、分析数据 将字节数组还原为对应的类型即可
//         byte[] getData()
//         getLength()
        byte[] datas = packet.getData();
        System.out.println(new String(datas));
        DataInputStream dis = new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(datas)));
        String msg = dis.readUTF();
        int age = dis.readInt();
        boolean flag = dis.readBoolean();
        char ch = dis.readChar();
        System.out.println(msg+"-->"+flag);
//                * 5、释放资源
        service.close();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值