简单了解java UDP编程
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 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 }