客户端
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();
}
}
}
}