Java中UDP的广播形式

UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地 ,也不能保证数据包到达的顺序。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

在Java中UDP的实现:

* UDP:
* 客户端:
* 1.创建用于UDP通信的socket对象---DatagramSocket(用于UDP数据的发送和接收)---数据报套接字
* 2.准备数据,封装包----DatagramPacket(数据包)
* 3.发送数据,通过send方法
* 4.关闭套接字对象--socket对象

* 服务器端: 接收数据

* 1.创建socket套接字对象,并绑定端口号
* 2.创建包对象,创建空数组,准备接收数据
* 3.接收数据
* 4.关闭资源

 

 

* UDP广播方式:
* 同一网段所有主机都能接收,前提是端口要监听
* 客户端发送广播,开启端口监听的服务端接收并打印消息
* 广播的实现 :由客户端发出广播,服务器端接收 
* String host = "255.255.255.255";//广播地址--代表所有主机
* 10.0.122.255----代表前三个网段是 10.0.122的所有主机

代码实现:

客户端(发送端):

复制代码

 1 import java.io.IOException;
 2 import java.net.DatagramPacket;
 3 import java.net.DatagramSocket;
 4 import java.net.InetAddress;
 5 import java.net.SocketException;
 6 import java.net.UnknownHostException;
 7 
 8 public class UDP_client {
 9     public static void main(String[] args) throws IOException {
10         //1.创建对象
11         //构造数据报套接字并将其绑定到本地主机上任何可用的端口。
12         DatagramSocket socket = new DatagramSocket();
13         //2.打包
14         byte[] arr = "客户端:哈哈。。。。".getBytes();
15         //四个参数: 包的数据  包的长度  主机对象  端口号                      
16         DatagramPacket packet = new DatagramPacket
17                 (arr, arr.length,InetAddress.getByName("10.0.122.255") , 4000);
18         
19         //3.发送
20         socket.send(packet);
21         
22         //4.关闭资源
23         socket.close();
24     }
25     
26 }

复制代码

 

服务器端(接收端):

复制代码

 1 import java.io.IOException;
 2 import java.net.DatagramPacket;
 3 import java.net.DatagramSocket;
 4 import java.net.SocketException;
 5 import java.util.Arrays;
 6 
 7 
 8 public class UDP_server {
 9     public static void main(String[] args) throws IOException {
10         //1
11         DatagramSocket serverSocket = new DatagramSocket(4000);
12         //2
13         byte[] arr = new byte[1024];
14         DatagramPacket packet = new DatagramPacket(arr, arr.length);
15         
16         //3 当程序运行起来之后,receive方法会一直处于监听状态
17         serverSocket.receive(packet);
18         //从包中将数据取出
19         byte[] arr1 = packet.getData();
20         System.out.println(new String(arr1));
21         
22         //4
23         serverSocket.close();
24     }
25 }

复制代码

 

结果:

前三个网段是 10.0.122的所有主机上的端口号为4000的服务器端,只要开着,都可以接收到 -------   客户端:哈哈。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值