基于UDP的网络编程

概念

User Datagram Protocol的简称,用户数据报协议,提供面向事务的简单不可靠信息传送服务。

特点

  1. 将数据封装成一个数据包,面向无连接. 如同广播站 和 收音机的关系
  2. 每一个数据包大小限制在64kb以内
  3. 因为面向无连接,不可靠, 会丢包
  4. 因为面向无连接,所以传输 速度特别快!!!
  5. UDP不区分客户端和服务器,只有发送端和接收端
  6. 网络游戏/网络直播均采用UDP协议、

相关方法

UDP的发送和接收需要数据包,就跟快递一样,需要将物品打包,所以,对于发送端,必须明确包的内容和容量,以及接收端的具体地址和端口号;而对于接收端,只需要建立端口号的连接,并准备好相应容量的包进行接收即可,因为数据包本身就包含有发送端的信息。

构造方法

//创建DatagramSocket,UDP的套接字,连接作用
DatagramSocket ds = new DatagramSocket();
DatagramSocket ds = new DatagramSocket(int port);

//创建数据包,【数据包里面包含后发送端的信息】
DatagramPacket packet = DatagramPacket(byte buf[], int length);
DatagramPacket packet = DatagramPacket(byte buf[], int length, InetAddress address, int port);

普通方法

//发送报包
ds.send(packet);

//接收报包,具有阻塞功能
ds.receive(packet);

接收端和发送端的简单信息交互基本流程

发送端

  1. 创建DatagramSocket
  2. 创建数据报包,明确接收端的ip和port
  3. 发送报包
  4. 接收报包
  5. 处理报包
  6. 关闭

接收端

  1. 创建DatagramSocket,提供端口号
  2. 创建数据报包
  3. 接收(阻塞方法)
  4. 处理数据
  5. 回复【注意回复的时候必须使用接收到的数据包获取对应发送方的Ip和port】
  6. 关闭

代码实现

//发送端
public class Sender {
    public static void main(String[] args) throws IOException {
        //1.创建DatagramSocket
        DatagramSocket ds = new DatagramSocket();

        //2.创建数据报包
        String say = "好久不见";
        //明确接收方的详细信息,IP和Port
        DatagramPacket packet = new DatagramPacket(say.getBytes(), say.getBytes().length, InetAddress.getLocalHost(),9990);

        //3.发送报包
        ds.send(packet);

        //4.接收
        byte[] buf = new byte[1024 * 8];
        DatagramPacket packet1 = new DatagramPacket(buf, buf.length);
        ds.receive(packet1);

        //5.处理
        String str = new String(buf, 0, buf.length);
        System.out.println("对方说:" + str);

        //6.关闭
        ds.close();
    }
}

//接收端
public class Receiver {
    public static void main(String[] args) throws IOException {
        //1.创建DatagramSocket
        DatagramSocket ds = new DatagramSocket(9990);

        //2.创建数据报包
        byte[] buf = new byte[1024 * 8];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);

        //3.接收(阻塞方法)
        System.out.println("准备接收");
        ds.receive(packet); //接收包中有对方的地址

        //4.处理数据
        String data = new String(buf, 0, buf.length);
        System.out.println("对方说:" + data);

        //5.回复
        String data1 = "十分想念";
        //通过数据报包获取发送方的详细信息,IP和Port
        DatagramPacket packet1 = new DatagramPacket(data1.getBytes(), data1.getBytes().length, packet.getAddress(), packet.getPort());
        ds.send(packet1);

        //6.关闭
        ds.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值