Advertisement

udp的发送数据和接收数据

阅读量:

发送数据

复制代码
         String ip = (String) SPUtils.get(IP_INFO, defaultIp, this);

    
         //获取本地ip地址
    
         InetAddress receiverHost = InetAddress.getByName(ip);
    
         byte[] titleByte = new byte[2];
    
         titleByte[0] = (byte)0xa0;
    
         titleByte[1] = (byte)0x9f;
    
         //卡号,ticketCode转换为byte类型
    
         byte[] ticketCodeByte = ticketCode.getBytes();
    
         //byte类型卡号的长度
    
         Integer ticketCodeLength = ticketCodeByte.length;
    
         //byte类型卡号的长度转换为byte类型
    
         byte[] ticketCodeLen = ticketCodeLength.toString().getBytes();
    
         //姓名转换为byte类型
    
         byte[] nameByte = name.getBytes();
    
         //byte类型姓名的长度
    
         Integer length = nameByte.length;
    
         //byte类型姓名的长度转换为byte类型
    
         byte[] nameLen = length.toString().getBytes();
    
         //图片url转换为byte类型
    
         byte[] headImgUrlByte = headImgUrl.getBytes();
    
         //byte类型图片url的长度
    
         Integer length1 = headImgUrlByte.length;
    
         //byte类型图片url的长度转换为byte类型
    
         byte[] headImgUrlLen = length1.toString().getBytes();
    
  
    
         byte[] info = new byte[titleByte.length+ticketCodeLen.length+ticketCodeByte.length
    
                                 +nameLen.length+nameByte.length+headImgUrlLen.length+headImgUrlByte.length];
    
  
    
         System.arraycopy(titleByte,0,info,0,titleByte.length);
    
         System.arraycopy(ticketCodeLen,0,info,titleByte.length,ticketCodeLen.length);
    
         System.arraycopy(ticketCodeByte,0,info,titleByte.length+ticketCodeLen.length,ticketCodeByte.length);                     System.arraycopy(nameLen,0,info,titleByte.length+ticketCodeLen.length+ticketCodeByte.length,nameLen.length);                  System.arraycopy(nameByte,0,info,titleByte.length+ticketCodeLen.length+ticketCodeByte.length+nameLen.length,nameByte.length);            System.arraycopy(headImgUrlLen,0,info,titleByte.length+ticketCodeLen.length+ticketCodeByte.length+nameLen.length+nameByte.length,headImgUrlLen.length);            System.arraycopy(headImgUrlByte,0,info,titleByte.length+ticketCodeLen.length+ticketCodeByte.length+nameLen.length+nameByte.length+headImgUrlLen.length,headImgUrlByte.length);
    
  
    
         mySocket = new DatagramSocket(Udp_port_send);//你的端口号
    
         //receiverHost:接收方的ip地址,Udp_port_send:接收方的端口号
    
         DatagramPacket pack = new DatagramPacket(info, info.length, receiverHost, Udp_port_send);
    
         mySocket.send(pack);
    
         mySocket.close();
    
    
    
    
    AI写代码

2.接收数据

复制代码
复制代码
 socket = MainApplication.getInstance().getMyDatagramSocket();

 byte[] receiveBuffer = new byte[1000];

 DatagramPacket datagram = new DatagramPacket(receiveBuffer, 1000);

 byte[] databyte = socket.receive(datagram);

 //断开连接

 //创建一个容量为databyte.length字节的ByteBuffer

 ByteBuffer buffer = ByteBuffer.allocate(databyte.length);

采用小字节序方式(little endian),将最低有效位(least significant bit, LSB)放置于低地址位置。

复制代码
 buffer.order(ByteOrder.LITTLE_ENDIAN);

 //向ByteBuffer中输入数据(.wrap() 或 .put())

 // put(byte[])在给定的字节数组写入字节到当前位置,并将position+1

 buffer.put(databyte);

循环缓冲区域;该技术用于将缓冲区域调整至传输数据的状态,在完成上述步骤后,输出通道将会进入传输模式。

// 数据处理从序列头部开始执行。循环移位操作维持缓冲区域内的数据状态不变;仅用于后续的写入操作。

复制代码
 buffer.flip();

 byte[] resultBytes = new byte[1];

 buffer.get(resultBytes);

 int resultLen = Integer.parseInt(new String(resultBytes));

 byte[] a = new byte[resultLen];

 buffer.get(a);

 String result = new String(a, "utf-8");
复制代码
复制代码
  
  

AI写代码

全部评论 (0)

还没有任何评论哟~