使用Java实现udp协议的单播

在计算机网络tcp/ip模型中,udp和tcp处在第三层,也就是网路层中。而udp协议和tcp协议是网路层中最重要和使用最多的协议。

UDP协议(User Datagram Protocol)是面向无连接的通讯协议,特点是速度快,有大小的限制(64kb),数据不安全,已丢失;TCP协议(Transmission Control Protocol)是面向连接的协议,特点与UDP互补,速度慢,没有大小限制,数据安全不易丢失。

在UDP协议的使用中,有三种通信方法,分别是:单播组播广播。单播顾名思义就是点对点的通信,是一个计算机对另一个计算机传递信息;组播就是一对多,一个计算机对局域网内多个计算机发送信息;广播就是对局域网内所有计算机发送信息。在这篇博客中,我们主要讨论UDP的原理和单播,组播和广播的分别实现。

udp单播发送端

首先第一步,我们创建一个DatagramSocket对象,类的构造方法可以是无参(表示随机使用可用的端口)或者有参(自选的端口)

DatagramSocket ds = new DatagramSocket();

第二步新建DatagramPacket数据包用来打包我们的数据。在构造器中提供数据的字节码,字节码长度,接收端的ip地址和接收端的端口号。在新建数据包前,我们可以先自定义一个字符串比如“你好”,然后转换成字节码数组提供给数据包(使用.getBytes()来将字符串转换为字节码数组)。接收端ip地址在这里使用的就是本机的地址localhost:127.0.0.1

String data = "你好呀";
byte[] bytes = data.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 10086;
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);

然后第三步就可以发送数据包了~

ds.send(dp);

最后第四步释放DatagramSocket资源

ds.close();

udp单播接收端

和发送端类似,首先创建DatagramSocket对象,但是接收端的对象需要提供指定端口号参数(因为在上面我们指定10086作为接收端端口号)

DatagramSocket ds = new DatagramSocket(10086);

第二步还是创建数据包DatagramPacket,这次在接收端只用提供新建的字节码数组和其长度就可以了(长度根据实际情况而定)

byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

第三步就是接收和解析数据包。用ds.receive(dp)方法接收从发送端发送的数据包。然后使用dp中的各种方法来提取我们需要的数据。在提取发送端发送的信息时,getData()方法返回的是字节码,需要用String的构造方法来转换为字符串

ds.receive(dp);
String data = new String(dp.getData());
InetAddress address = dp.getAddress();
int port = dp.getPort();
int length = dp.getLength();

最后一步就是释放资源

ds.close();

这就是用Java实现udp单播的基本方法。在下一个博客中我会记录udp组播和广播的实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿黄勇闯天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值