java-----UDP---DatagramPacket类与DatagramSocket类

一、数据报通信

      java中通过两个类来实现UDP协议顶层的数据报:DatagramPacket对象是数据容器,DatagramSocket是用来发送和接受DatagramPacket的套接字。采用UDP通信机制下,在发送信息时,首先要将数据打包,然后将打包好的数据包发送目的地。在接收

信息时,首先接收别人发来的数据报,然后查看数据报中的内容。

二、DatagramPacket类

       要发送或接收数据报,需要用DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据包。

         重要的构造方法:

         DatagramPacket(byte[] buf,int length)   构造数据包对象,用来接收长度为length的数据包

         DatagramPacket(byte[] buf,int length,InetAddress address,int port)  构造数据包,用来将length长度的数据包发送到指定主机上的指定端口号

         DatagramPacket(byte[] buf,int offset,int length)

         DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)

         DatagramPacket(byte[] buf,int offset,int length,SocketAddress address)

         DatagramPacket(byte[] buf,int length,SocketAddress address)

        常用方法:

        InetAddress getAddress()   返回某台机器的IP地址,此数据报是将要发往该主机或是从该主机接收到的

        byte[] getData()    返回数据缓冲区

        int getLength()    返回将要发送或是接收的数据包的数据长度

        SocketAddress getSocketAddress() 获取要将此包发送到的或是发出此数据报的远程主机的SocketAddress(通常为IP地址+端口号)

        void setAddress(InetAddress iaddr) 设置要将此数据报发往的那台机器的IP地址

        void setData(byte[] buf)  为此包设置数据缓冲区

三、DatagramSocket类

      DatagramSocket类是用来发送和接收数据包的套接字,负责将打包的数据包发送到目的地,或是从目的地接收数据包

         重要的构造方法

         DatagramSocket(int port)   创建数据报套接字并将其绑定到本地主机上的指定的端口

         常用方法

         void receive(DatagramPacket p)  从此套接字接收数据报包

         void send(DatagramPacket p)  从此套接字发送数据包

四、代码实现

 将“你好”封装成数据包,发送到目的主机“www.baidu.com”,端口号为2016上

byte buff[] = "你好".getByte();
InetAddress destAddress = InetAddress.getByName("www.baidu.com");
DatagramPacket dataPacket = new DatagramPacket(buff,buff.length,destAddress,2016);
DatagramSocket sendSocket = new DatagramSocket();
sendSocket.send(dataPacket);

接收外界发送到本机2016号端口的数据包

byte buff[] = new byte[8192];
DatagramPacket receivePacket = new DatagramPacket(buff,buff.length);
DatagramSocket receiveSocket = new DatagramSocket(2016);
receiveSocket.receive(receivePacket);
int length = receivePacket.getLength();
String message = new String(receivePacket.getData(),0,length);
System.out.println(message);




你可能感兴趣的:(java)