java之UDP

客户端

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();
				}
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值