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来传送的喔
f,int offset,int length,InetAddress address,int port);这个一般是用来发送的,毕竟要知道对方的端口号嘛。
(其他的构造方法就不贴上来了╮(╯▽╰)╭)
3.Socket的实例也是有一些常用的方法
socket.send(packet);发送数据包
socket.receive(packet);接收数据包(没有数据包接收这个线程就一直等待,就停在这)
socket.close();这个相信都懂哦(关闭这个套接字)
4.好了该讲的都讲得差不多了(上一张UDP传送的图好了,图是引用其他大神的_φ(❐_❐✧ )
5.上传个代码好了
这个模拟客户端的
1 package com.udp.test;
2 import java.io.IOException;
3 import java.net.DatagramPacket;
4 import java.net.DatagramSocket;
5 import java.net.InetAddress;
6 public class client {
7 //main
8 public static void main(String []args) throws IOException {
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 package com.udp.test;
2 import java.io.IOException;
3 import java.net.DatagramPacket;
4 import java.net.DatagramSocket;
5 public class server {
6 //main
7 public static void main(String []args) throws IOException {
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 }