UDP编程大解

UDP编程的步骤:

发送端和接收端是相对的

发送端:

  1. 先创建DatagramSocket对象,并在指定端口监听

  2. 同时创建一个DatagramPacket对象,用于包装数据

    DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。

  3. 再调用DatagramSocket类的Send方法

  4. 最后关闭DatagramSocket对象的流

接收端:

  1. 先创建DatagramSocket对象,并在指定端口监听

  2. 同时创建一个DatagramPacket对象,用于接收数据包

    DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket用于接收长度的数据包 length

  3. 再调用DatagramPacket类中getData方法和getLength方法【相当于拆包】

  4. 使用String构造器打印出信息

  5. 最后关闭DatagramSocket对象的流

接收端

package com.haikang.inte_.udp_;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
 * @author: 海康
 * @version: 1.0
 */
public class UDPReceiverA {
    public static void main(String[] args) throws IOException {
        //接收方在端A监听
        DatagramSocket socket = new DatagramSocket(9999);
        // 创建 DatagramSocket 对象
        byte[] bytes = new byte[1024 * 8];
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length);

        // 调用 receiver 接收方法
        //如果程序没有接收到信息直接阻塞在此处
        socket.receive(packet);
        // 调用DatagramPacket类中的getData方法和getLength方法进行拆包
        byte[] data = packet.getData();
        int length = packet.getLength();
        System.out.println(new String(data,0,length));

        // 向发送端回信息
        // 创建一个 DatagramPacket对象用于封装数据
        byte[] by = "好的,明天雷南吃,串串香!".getBytes();
        DatagramPacket datagramPacket = new DatagramPacket(by, by.length, InetAddress.getByName("127.0.0.1"), 8888);
        // 调用发送方法
        socket.send(datagramPacket);

        //关闭流
        if (socket!=null){
            socket.close();
        }
        System.out.println("接收端退出程序!");
    }
}

发送端

package com.haikang.inte_.udp_;

import java.io.IOException;
import java.net.*;

/**
 * @author: 海康
 * @version: 1.0
 */
public class UDPSenderB {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(8888);
        //创建一个DatagramSocket对象用于包装数据
        byte[] bytes = "hello 明天雷南吃串串香不?".getBytes();
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"), 9999);
        socket.send(datagramPacket);

        //创建一个DatagramPacket对象用于接收数据
        byte[] data = new byte[1024 * 8];
        DatagramPacket packet = new DatagramPacket(data, data.length);
        //如果没有接收到数据程序一直阻塞在此处
        socket.receive(packet);
        // 调用方法对数据进行拆包
        System.out.println(new String(packet.getData(),0,packet.getLength()));

        //关闭流
        if (socket!=null){
            socket.close();
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值