基于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广播方式:
*同一网段所有主机都能接收,前提是端口要监听
*客户端发送广播,开启端口监听的服务端接收并打印消息
*广播的实现:由客户端发出广播,服务器端接收
*Stringhost="255.255.255.255";//广播地址--代表所有主机
*10.0.122.255----代表前三个网段是10.0.122的所有主机
代码实现:
客户端(发送端):
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.SocketException;
importjava.net.UnknownHostException;
publicclassUDP_client{
publicstaticvoidmain(String[]args)throwsIOException{
//1.创建对象
//构造数据报套接字并将其绑定到本地主机上任何可用的端口。
DatagramSocketsocket=newDatagramSocket();
//2.打包
byte[]arr="客户端:哈哈。。。。".getBytes();
//四个参数:包的数据包的长度主机对象端口号
DatagramPacketpacket=newDatagramPacket
(arr,arr.length,InetAddress.getByName("10.0.122.255"),4000);
//3.发送
socket.send(packet);
//4.关闭资源
socket.close();
}
}
服务器端(接收端):
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.SocketException;
importjava.util.Arrays;
publicclassUDP_server{
publicstaticvoidmain(String[]args)throwsIOException{
//1
DatagramSocketserverSocket=newDatagramSocket(4000);
//2
byte[]arr=newbyte[1024];
DatagramPacketpacket=newDatagramPacket(arr,arr.length);
//3当程序运行起来之后,receive方法会一直处于监听状态
serverSocket.receive(packet);
//从包中将数据取出
byte[]arr1=packet.getData();
System.out.println(newString(arr1));
//4
serverSocket.close();
}
}
结果:
前三个网段是10.0.122的所有主机上的端口号为4000的服务器端,只要开着,都可以接收到---
客户端:哈哈。。。。
以上这篇基于Java中UDP的广播形式(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。