Java网络编程底子(三) Datagram类操纵办法[Java编程]
本文“Java网络编程底子(三) Datagram类操纵办法[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Datagram(数据包)是一种极力而为的传送数据的方法,它只是把数据的目的地记录在数据包中,然后就直接放在网络上,系统不保证数据能否能安全送到,大概什么时刻可以送到,也就是说它并不保证传送质量.
1 UDP套接字
数据报(Datagram)是网络层数据单元在介质上传输信息的一种逻辑分组格局,它是一种在网络中传达的、独立的、自身包含地址信息的消息,它可否到达目的地、到达的时间、到达时内容能否会改变不能精确地知道.它的通信双方是不需求成立衔接的,关于一些不需求很高质量的利用程序来说,数据报通信是一个非常好的挑选.还有就是对及时性要求很高的情形,比方在及时音频和视频利用中,数据包的丧失和位置错乱是静态的,是可以被人们所忍耐的,但是假如在数据包位置错乱或丧失时要求数据包重传,就是用户所不能忍耐的,这时便可以操纵UDP协议传输数据包.在Java的java.net包中有两个类DatagramSocket和DatagramPacket,为利用程序中采取数据报通信方法举行网络通信.
利用数据包方法首先将数据打包,Java.net包中的DategramPacket类用来成立数据包.数据包有两种,一种用来传送数据包,该数据包有要传送到的目的地址;另一种数据包用来接纳传送过来的数据包中的数据.要成立接纳的数据包,通过DatagramPackett类的办法构造:
public DatagramPacket(byte ibuft[],int ilength)
public DatagramPacket( byte ibuft[],int offset ,int ilength)
ibuf[]为承受数据包的存储数据的缓冲区的长度,ilength为从传送过来的数据包中读取的字节数.当采取第一种构造办法时,接纳到的数据从ibuft[0]开始存放,直到整个数据包接纳完毕大概将ilength的字节写入ibuft为止.采取第二种构造办法时,接纳到的数据从ibuft[offset]开始存放.假如数据包长度超越了ilength,则触发IllegalArgument-Exception.不过这是RuntimeException,不需求用户代码捕捉.示范代码以下:
byte[ ] buffer=new byte[8912];
DatagramPacket datap=new DatagramPacket(buffer ,buffer.length( ));
成立发送数据包的构造办法为:
public DatagramPacket(byt ibuf[],int ilength,InetAddrss iaddr,int port)
public DatagramPacket(byt ibuf[],int offset , int ilength,InetAddrss iaddr,int port)
iaddr为数据包要传送到的目标地址,port为目标地址的程序承受数据包的端口号(即目标地址的计算机上运行的客户程序是在哪一个端口接纳服务器发送过来的数据包).ibuf[]为要发送数据的存储区,以ibuf数组的offset位置开始填充数据包ilength字节,假如没有offset,则从ibuf数组的0位置开始填充.以下示范代码是要发送一串字符串:
String s = new String("java networking");
byte[ ] data=s.getbytes();
int port=1024;
try{
InetAddress ineta= InetAddress.getByName(" 169.254.0.14");
DatagramPacket datap=new DatagramPacket
(data ,data.length( ),ineta,port);
}
catch(IOException e) {
}
数据包也是对象,也有操作办法用来获得数据包的信息,这是很有效的.其办法以下:
public InetAddress getAddress() 假如是发送数据包,则得到数据包要发送的目标地址,但是假如是接纳数据包则返回发送此数据包的源地址.
public byte[]getData()
返回一个字节数组,此中是数据包的数据.假如想把字节数组转换成别的范例就要举行转化.假如想转化成String范例,可以举行以下的处理,设DatagramPacket datap为:
String s = new String(datap.getbytes());
public int getLength() 得到数据包中数据的字节数.
pubic int getPort( ) 返回数据包中的目标地址的主机端口号.
以上是“Java网络编程底子(三) Datagram类操纵办法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |