由于最近编写的游戏涉及到了网络编程这块,所以特意记录下。
UDP简介
UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报。在OSI模型中,UDP位于第四层——传输层,处于IP协议额上一层。UDP有不提供数据报分组、组装以及不能对数据报排序的缺点。当报文发送之后,是无法得知其是否安全完整到达的。
由于UDP不属于连接性协议的特性,因此具有资源消耗小、处理速度快的优点,所以通过音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响,如人们聊天使用的ICQ和OICQ使用的就是UDP协议。
使用java.net包下的DatagramSocket和DatagramPacket类,可以非常方便地控制用户数据报文。下面就对这两个类进行介绍
DatagramPacket类
DatagramPacket类用于处理报文,他将byte数组、目标地址和目标端口等数据包装成报文或者将报文拆卸成byte数组。
DatagramPacket有多个构造方法,通常情况下它们都有两个共同的参数:byte[] buffer和int length。其中buffer参数包含了一个对保存自寻址数据报信息的字节数组的引用,length表示字节数组的长度。
最简单的构造方法是:
DatagramPacket(byte[] buffer,int length);
这个构造方法确定了数据报数组和数组的长度,但没有任何数据报的地址和端口信息,这些信息可以通过调用方法setAddress(InetAddress addr)和setPort(int port)添加。下面代码示范这些方法的使用:
byte[] buffer = new byte[100];
DatagramPacket dgp = new DatagramPacket(buffer,buffer.length);
InetAddress address = InetAddress.getByName("www.disney.com");
dgp.setAddress(address);
dgp.setPort(6666);//设置数据报发送端口
如果用户更喜欢在调用构造方法时同时包括地址和端口号,则可以使用:
Datagram