UDP通信
DatagramPacket
UDP是一种面向无连接的协议,也就是在通信时发送端和接收端不用建立连接.UDP通信的过程就像是货运公司在两个码头间发送货物一样.在码头发送和接收货物时都需要使用集装箱来装载货物,UDP通信也是一样,发送和接收的数据也需要使用“集装箱”进行打包,为此JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据.
想要创建一个DatagramPacket对象,首先需要了解一下它的构造方法。在创建发送端和接收端的DatagramPacket对象时,使用的构造方法有所不同,接收端的构造方法只需要接收一个字节数组来存放接收到的数据,而发送端的构造方法不但要接收存放了发送数据的字节数组,还需要指定发送端IP地址和端口号。
接下来根据API文档的内容,对DatagramPacket的构造方法进行逐一详细地讲解。
第一个方法是DatagramPacket(byte[] buf ,int length)主要是构造了DatagramPacket()方法,用来接收length的数据包.
使用该构造方法在创建DatagramPacket对象时,指定了封装数据的字节数组和数据的大小,没有指定IP地址和端口号。很明显,这样的对象只能用于接收端,不能用于发送端。因为发送端一定要明确指出数据的目的地(ip地址和端口号),而接收端不需要明确知道数据的来源,只需要接收到数据即可。
第二个方法是DatagramPacket(byte[] buf,int length,InetAddressaddress,int port)这个方法主要是构造了数据报包,用来将长度为length的包发送的指定的主机的指定端口号.
使用该构造方法在创建DatagramPacket对象时,不仅指定了封装数据的字节数组和数据的大小,还指定了数据包的目标IP地址(addr)和端口号(port)。该对象通常用于发送端,因为在发送数据时必须指定接收端的IP地址和端口号,就好像发送货物的集装箱上面必须标明接收人的地址一样。
主要类方法
InetAddress getAddress() 返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。
byte[]getData()返回数据缓冲区。
intgetLength()返回将要发送或接收到的数据的长度。
intgetPort()返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。
public class MainApp {
public static void main(String[] args) throws IOException {
//获取本机IP对象
InetAddress localHost =InetAddress.getLocalHost();
//获取本机ip地址和主机名
System.out.println("ip地址:"+localHost.getHostAddress());
System.out.println("主机名:"+localHost.getHostName());
//获取百度IP对象
InetAddress chuanzhiHost =InetAddress.getByName("www.baidu.com");
//获取百度ip地址和主机名
System.out.println("ip地址:"+chuanzhiHost.getHostAddress());
System.out.println("主机名:"+chuanzhiHost.getHostName());
}
}