zoukankan      html  css  js  c++  java
  • 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();

        }

    }

     

     

  • 相关阅读:
    UINavigationController详细(转)
    IOS控件大全及控件大小
    IOS的各种控件(转载,防止遗忘)
    算法导论学习-heapsort
    POJ1502: MPI Maelstrom
    POJ1163 The Triangle: 倒三角形问题
    算法导论学习-Dynamic Programming
    POJ2299: Ultra-QuickSort-合并排序解决逆序数问题
    POJ3750: 小孩报数问题+一道经典约瑟夫问题(猴子选大王)
    用头插法实现单链表整表创建
  • 原文地址:https://www.cnblogs.com/1997WY/p/10708697.html
Copyright © 2011-2022 走看看