UDP通信


DatagramPacket类   ------打包和拆包

DataPatagramSocket--------发送接受

 相关方法

 

//发送(打包)

DatagramPacket(byt【】 buf,int length, InetAddress);

 

接受【拆包】

DatagramPacket(byte[] buf,int length)

 

IP地址

InetAddress getAddress();

 

数据缓存

byte【】 getDate();

 

 数据长度

int getLongth();

 

发送

DatagramSocket();

 

接受

DatagramSocket(int port);

相关实例

l  UDP完成数据的发送

/*

* 发送端

 * 1,创建DatagramPacket对象,封装数据,接收的地址和端口

 * 2,创建DatagramSocket对象

* 3,调用DatagramSocket中的send方法,发送数据包

 * 4,关闭资源DatagramSocket

 */

publicclass UDPSend {

    publicstaticvoid main(String[] args) throws IOException {

        //1,创建DatagramSocket对象

        DatagramSocket sendSocket = new DatagramSocket();

        //2,创建DatagramPacket对象,并封装数据

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

       //构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

        byte[] buffer = "hello,UDP".getBytes();

        DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.75.58"), 12306);

        //3,发送数据

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

        sendSocket.send(dp);

        //4,释放流资源

        sendSocket.close();

    }

}

 

l  UDP完成数据的接收

/*

 * UDP接收端

 *

 * 1,创建DatagramSocket对象,绑定端口号(要和发送端端口号一致)

 * 2,创建字节数组,接收发来的数据

 * 3,创建数据包对象DatagramPacket

 * 4,调用DatagramSocket对象方法receive(DatagramPacket dp)接收数据,数据放在数据包中

 * 5,拆包

      发送的IP地址

          数据包对象DatagramPacket方法getAddress()获取的是发送端的IP地址对象

          返回值是InetAddress对象

      接收到的字节个数

          数据包对象DatagramPacket方法getLength()

      发送方的端口号

          数据包对象DatagramPacket方法getPort()发送端口

 * 6,关闭资源

 */

publicclass UDPReceive {

    publicstaticvoid main(String[] args) throws IOException {

        //1,创建DatagramSocket对象,并指定端口号

        DatagramSocket receiveSocket = new DatagramSocket(12306);

        //2,创建DatagramPacket对象, 创建一个空的仓库

        byte[] buffer = newbyte[1024];

        DatagramPacket dp = new DatagramPacket(buffer, 1024);

        //3,接收数据存储到DatagramPacket对象中

        receiveSocket.receive(dp);

        //4,获取DatagramPacket对象的内容

        //谁发来的数据  getAddress()

        InetAddress ipAddress = dp.getAddress();

        String ip = ipAddress.getHostAddress();//获取到了IP地址

        //发来了什么数据  getData()

        byte[] data = dp.getData();

        //发来了多少数据 getLenth()

        intlength = dp.getLength();

        //显示收到的数据

        String dataStr = new String(data,0,length);

        System.out.println("IP地址:"+ip+ "数据是"+ dataStr);

        //5,释放流资源

        receiveSocket.close();

    }

}

 

 

 

 

 

 

posted @ 2019-04-15 09:00  小白WY  阅读(232)  评论(0编辑  收藏  举报