java之UDP

it2022-05-05  120

客户端

public class UDPClient { public static void main(String[] args) { String sendStr = null; String netAddress = args[0]; final int PORT_NUM = Integer.parseInt(args[1]);//Integer.parseInt(args[1]); DatagramSocket datagramSocket = null; DatagramPacket datagramPacket; while(true){ try { /*** 发送数据 ***/ // 初始化datagramSocket,注意与前面Server端实现的差别 datagramSocket = new DatagramSocket(8888); // 使用DatagramPacket(byte buf[], int length, InetAddress address, int // port)函数组装发送UDP数据报 Scanner sc = new Scanner(System.in); sendStr=sc.nextLine(); // byte[] buf = sendStr.getBytes(); byte[] buf =new byte[26]; buf[0]=0x00; buf[1]=0x00; buf[2]=0x00; buf[3]=0x00; buf[4]=0x00; buf[5]=0x00; buf[6]=0x00; buf[7]=0x01; buf[8]=0x00; buf[9]=0x00; buf[10]=0x00; buf[11]=0x00; buf[12]=0x00; buf[13]=0x02; buf[14]=0x00; buf[15]=0x00; buf[16]=0x00; buf[17]=0x00; buf[18]=0x00; buf[19]=0x00; buf[20]=0x00; buf[21]=0x00; buf[22]=0x00; buf[23]=0x00; buf[24]=0x00; buf[25]=0x00; InetAddress address = InetAddress.getByName(netAddress); datagramPacket = new DatagramPacket(buf, buf.length, address, PORT_NUM); // 发送数据 datagramSocket.send(datagramPacket); byte[] bb = new byte[80]; datagramPacket=new DatagramPacket(bb, bb.length);; datagramSocket.receive(datagramPacket); byte[] data = datagramPacket.getData(); System.out.println(data[7]+","+data[13]); /*** 接收数据 ***/ byte[] b = new byte[26]; byte[] seq = {b[0],b[1],b[2],b[3]}; byte[] uid = {b[4],b[5],b[6],b[7]}; byte[] ssrc = {b[8],b[9],b[10],b[11]}; byte[] msg_id = {b[12],b[13]}; byte[] cid = {b[14],b[15],b[16],b[17]}; byte[] result = {b[18],b[19],b[20],b[21]}; byte[] base_seq ={b[22],b[23],b[24],b[25]}; DatagramPacket recePacket = new DatagramPacket(b, b.length); datagramSocket.receive(recePacket); for(int i=0;i<b.length;i++){ System.out.println(b[i]); } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭socket if (datagramSocket != null) { datagramSocket.close(); } } } } }

服务端

public class UDPServer { public static void main(String[] args) { final int PORT_NUM = 8888; // port号 // 用以存放接收数据的字节数组 byte[] b = new byte[80]; // 数据报套接字 DatagramSocket datagramSocket = null; // 用以接收数据报 DatagramPacket datagramPacket; while(true){ try { /******* 接收数据流程 **/ // 创建一个数据报套接字,并将其绑定到指定port上 datagramSocket = new DatagramSocket(PORT_NUM); // DatagramPacket(byte buf[], int length),建立一个字节数组来接收UDP包 datagramPacket = new DatagramPacket(b, b.length); // receive()来等待接收UDP数据报 datagramSocket.receive(datagramPacket); System.out.println(datagramPacket.getPort()); byte[] data = datagramPacket.getData(); System.out.println(data[13]); System.out.println(); datagramSocket.send(datagramPacket); /****** 解析数据报 ****/ byte[] seq = {b[0],b[1],b[2],b[3]}; byte[] uid = {b[4],b[5],b[6],b[7]}; byte[] ssrc = {b[8],b[9],b[10],b[11]}; byte[] msg_id = {b[12],b[13]}; byte[] cid = {b[14],b[15],b[16],b[17]}; byte[] base_seq = {b[18],b[19],b[20],b[21]}; byte[] view = {b[22]}; byte[] base_ts = {b[23],b[24],b[25],b[26],b[27],b[28],b[29],b[30]}; byte[] token_size = {b[31],b[32]}; String imei_id = ""; for(int i=66;i<b.length;i++){ int a = b[i]; imei_id += String.valueOf(b[i]); } System.out.println("imei_id ================ "+imei_id); for(int i=0;i<b.length;i++){ System.out.println(b[i]); } System.out.println(b.length); for(int i=0;i<b.length;i++){ System.out.print(b[i]+","); } System.out.println("---"); System.out.println("ip :"+datagramPacket.getAddress().getHostAddress()); System.out.println("Server Port:" + datagramPacket.getPort()); /***** 返回ACK消息数据报 */ // 组装数据报 byte[] send = new byte[52]; byte[] uid2 = {0,0,0,0,0,0,0,1}; byte[] msg_id2 = {0,0,0,2}; byte[] result = {0,0,0,0,0,0,0,0}; System.arraycopy(seq,0,send,0,8);//0000 System.arraycopy(uid2,0,send,8,8);//0001 System.arraycopy(ssrc,0,send,8,8);//0000 System.arraycopy(msg_id2,0,send,8,4);//02 System.arraycopy(cid,0,send,4,8);//0000 System.arraycopy(result,0,send,8,8);//0000 System.arraycopy(base_seq,0,send,8,8);//0000 DatagramPacket sendPacket = new DatagramPacket(send, send.length, datagramPacket.getAddress(), datagramPacket.getPort()); for(int i=0;i<send.length;i++){ System.out.println(send[i]); } // 发送消息 datagramSocket.send(sendPacket); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭socket if (datagramSocket != null) { datagramSocket.close(); } } } }

最新回复(0)