1.UDP协议的简单描述
UDP是基于运输层的一个无连接协议,不提供数据包分组,排序,封装管理,将数据包发送出去后对其是否到达就已经不关心了。
所以UDP的优缺点很容易归纳。因为UDP不会对数据包进行分组,排序等操作,就少了许多像TCP协议一般的控制方式(拥塞控制,三
次握手四次挥手的连接与释放,重传等),少了TCP这些繁琐的控制传送的方式,UDP的优点就体现了出来,那就是迅速。缺点也就是
传送不可靠了。
2.java中UDP协议的使用描述
java使用UDP协议是很简单的,根据UDP的特性可以知道,不用创建连接,所以只要通过普通的socket就能发送packet了。简单介绍
一下java使用UDP的类。
1.DatagramSocket这个类就是java通过UDP协议来创建的Socket。(贴上几个常用的构造方法意思一哈╮(╯▽╰)╭)
DatagramSocket();无参构造方法
DatagramSocket( int port);带端口号的构造方法
DatagramSocket(int port, InetAddress laddr);带端口也带上地址的构造方法
2.DatagramPacket这个类就是定义发送或者是接收的数据包了。(也贴一些构造方法)
DatagramPacket(byte[] buf, int length);说明了传送时是一byte来传送的喔
DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port);这个一般是用来发送的,毕竟要知道对方的端口号嘛。
(其他的构造方法就不贴上来了╮(╯▽╰)╭)
3.Socket的实例也是有一些常用的方法
socket.send(packet);发送数据包
socket.receive(packet);接收数据包(没有数据包接收这个线程就一直等待,就停在这)
socket.close();这个相信都懂哦(关闭这个套接字)
4.好了该讲的都讲得差不多了(上一张UDP传送的图好了,图是引用其他大神的_φ(❐_❐✧ )
5.上传个代码好了
这个模拟客户端的
1 packagecom.udp.test;2 importjava.io.IOException;3 importjava.net.DatagramPacket;4 importjava.net.DatagramSocket;5 importjava.net.InetAddress;6 public classclient {7 //main
8 public static void main(String []args) throwsIOException {9 //定义一个UDPsocket
10 DatagramSocket socket = new DatagramSocket(7410);11 //定义发送数据
12 String str_data = "我想吃饭。";13 byte data[] =str_data.getBytes();14 //定义发送地址
15 InetAddress address =InetAddress.getLocalHost();16 //定义发送包
17 DatagramPacket packet = new DatagramPacket(data, 0, data.length, address, 8520);18 //发送
19 socket.send(packet);20 //等待服务端回复
21 byte data2[] = new byte[1024];22 DatagramPacket packet2 = new DatagramPacket(data2, 0, data2.length);23 socket.receive(packet2);24 //输出接收内容
25 String string = new String(data2, 0, packet2.getLength());26 System.out.println("这里是客户端,服务端说:"+string);27 //关闭客户端
28 socket.close();29 }30 }
这个是模拟服务端
1 packagecom.udp.test;2 importjava.io.IOException;3 importjava.net.DatagramPacket;4 importjava.net.DatagramSocket;5 public classserver {6 //main
7 public static void main(String []args) throwsIOException {8 //定义端口号
9 DatagramSocket socket = new DatagramSocket(8520);10 //定义接收数据
11 byte data[] = new byte[1024];12 //定义接收包
13 DatagramPacket packet = new DatagramPacket(data, 0, data.length);14 //等待接收
15 socket.receive(packet);16 //返回接收结果
17 String string = new String(data, 0, packet.getLength());18 System.out.println("这里是服务端,客户端说:"+string);19 //创建回复数据
20 String str_data = "收到啦";21 byte data2[] =str_data.getBytes();22 //创建回复包
23 packet.getAddress();24 DatagramPacket packet2 = new DatagramPacket(data2, 0, data2.length, packet.getAddress(), packet.getPort());25 //发起回复
26 socket.send(packet2);27 //关闭连接
28 socket.close();29 }30 }