1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 仿豌豆荚实现android连接pc方法

仿豌豆荚实现android连接pc方法

时间:2024-01-12 01:02:30

相关推荐

仿豌豆荚实现android连接pc方法

需求:

1.一个android端的service后台运行的程序,作为socket的服务器端;用于接收Pc client端发来的命令,来处理数据后,把结果发给PC client

2.PC端程序,作为socket的客户端,用于给android手机端发操作命令

难点分析:

1.手机一定要有adb模式,即插上USB线时马上提示的对话框选adb。好多对手机的操作都可以用adb直接作。

不过,我发现LG GW880就没有,要去下载个

2.android默认手机端的IP为“127.0.0.1”

3.要想联通PC与android手机的sokcet,一定要用adb forward 来作下端口转发才能连上socket.

[java]view plaincopyRuntime.getRuntime().exec("adbforwardtcp:12580tcp:10086"); Thread.sleep(3000);

4.android端的service程序Install到手机上容易,但是还要有方法来从PC的client端来启动手机上的service ,这个办法可以通过PC端adb命令来发一个Broastcast,手机端再写个接收BroastcastReceive来接收这个Broastcast,在这个BroastcastReceive来启动service

pc端命令:

[java]view plaincopyRuntime.getRuntime().exec( "adbshellambroadcast-aNotifyServiceStart");

android端的代码:ServiceBroadcastReceiver.java

[java]view plaincopypackagecom.otheri.service; importandroid.content.BroadcastReceiver; importandroid.content.Context; importandroid.content.Intent; importandroid.util.Log; publicclassServiceBroadcastReceiverextendsBroadcastReceiver{ privatestaticStringSTART_ACTION="NotifyServiceStart"; privatestaticStringSTOP_ACTION="NotifyServiceStop"; @Override publicvoidonReceive(Contextcontext,Intentintent){ Log.d(androidService.TAG,Thread.currentThread().getName()+"---->" +"ServiceBroadcastReceiveronReceive"); Stringaction=intent.getAction(); if(START_ACTION.equalsIgnoreCase(action)){ context.startService(newIntent(context,androidService.class)); Log.d(androidService.TAG,Thread.currentThread().getName()+"---->" +"ServiceBroadcastReceiveronReceivestartend"); }elseif(STOP_ACTION.equalsIgnoreCase(action)){ context.stopService(newIntent(context,androidService.class)); Log.d(androidService.TAG,Thread.currentThread().getName()+"---->" +"ServiceBroadcastReceiveronReceivestopend"); } } }

5.由于是USB连接,所以socket就可以设计为一但连接就一直联通,即在new socket和开完out,in流后,就用个while(true){}来循环PC端和android端的读和写

android的代码:

[java]view plaincopypublicvoidrun(){ Log.d(androidService.TAG,Thread.currentThread().getName()+"---->" +"aclienthasconnectedtoserver!"); BufferedOutputStreamout; BufferedInputStreamin; try{ /*PC端发来的数据msg*/ StringcurrCMD=""; out=newBufferedOutputStream(client.getOutputStream()); in=newBufferedInputStream(client.getInputStream()); //testSocket();//测试socket方法 androidService.ioThreadFlag=true; while(androidService.ioThreadFlag){ try{ if(!client.isConnected()){ break; } /*接收PC发来的数据*/ Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"willread......"); /*读操作命令*/ currCMD=readCMDFromSocket(in); Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"**currCMD===="+currCMD); /*根据命令分别处理数据*/ if(currCMD.equals("1")){ out.write("OK".getBytes()); out.flush(); }elseif(currCMD.equals("2")){ out.write("OK".getBytes()); out.flush(); }elseif(currCMD.equals("3")){ out.write("OK".getBytes()); out.flush(); }elseif(currCMD.equals("4")){ /*准备接收文件数据*/ try{ out.write("servicereceiveOK".getBytes()); out.flush(); }catch(IOExceptione){ e.printStackTrace(); } /*接收文件数据,4字节文件长度,4字节文件格式,其后是文件数据*/ byte[]filelength=newbyte[4]; byte[]fileformat=newbyte[4]; byte[]filebytes=null; /*从socket流中读取完整文件数据*/ filebytes=receiveFileFromSocket(in,out,filelength, fileformat); //Log.v(Service139.TAG,"receivedata="+new //String(filebytes)); try{ /*生成文件*/ Filefile=FileHelper.newFile("R0013340.JPG"); FileHelper.writeFile(file,filebytes,0, filebytes.length); }catch(IOExceptione){ e.printStackTrace(); } }elseif(currCMD.equals("exit")){ } }catch(Exceptione){ //try{//out.write("error".getBytes("utf-8")); //out.flush(); //}catch(IOExceptione1){//e1.printStackTrace(); //} Log.e(androidService.TAG,Thread.currentThread().getName() +"---->"+"readwriteerror111111"); } } out.close(); in.close(); }catch(Exceptione){ Log.e(androidService.TAG,Thread.currentThread().getName() +"---->"+"readwriteerror222222"); e.printStackTrace(); }finally{ try{ if(client!=null){ Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"client.close()"); client.close(); } }catch(IOExceptione){ Log.e(androidService.TAG,Thread.currentThread().getName() +"---->"+"readwriteerror333333"); e.printStackTrace(); } }

6.如果是在PC端和android端的读写操作来while(true){}循环,这样socket流的结尾不好判断,不能用“-1”来判断,因为“-1”是只有在socket关闭时才作为判断结尾。

7.socket在out.write(bytes);时,要是数据太大时,超过socket的缓存,socket自动分包发送,所以对方就一定要用循环来多次读。最好的办法就是服务器和客户端协议好,比如发文件时,先写过来一个要发送的文件的大小,然后再发送文件;对方用这个大小,来循环读取数据。

android端接收数据的代码:

[java]view plaincopy/** *功能:从socket流中读取完整文件数据 * *InputStreamin:socket输入流 * *byte[]filelength:流的前4个字节存储要转送的文件的字节数 * *byte[]fileformat:流的前5-8字节存储要转送的文件的格式(如.apk) * **/ publicstaticbyte[]receiveFileFromSocket(InputStreamin, OutputStreamout,byte[]filelength,byte[]fileformat){ byte[]filebytes=null;//文件数据 try{ intfilelen=MyUtil.bytesToInt(filelength);//文件长度从4字节byte[]转成Int Stringstrtmp="readfilelengthok:"+filelen; out.write(strtmp.getBytes("utf-8")); out.flush(); filebytes=newbyte[filelen]; intpos=0; intrcvLen=0; while((rcvLen=in.read(filebytes,pos,filelen-pos))>0){ pos+=rcvLen; } Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"readfileOK:filesize="+filebytes.length); out.write("readfileok".getBytes("utf-8")); out.flush(); }catch(Exceptione){ Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"receiveFileFromSocketerror"); e.printStackTrace(); } returnfilebytes; }

8.socket的最重要的机制就是读写采用的是阻塞的方式,如果客户端作为命令发起者,服务器端作为接收者的话,只有当客户端client用out.writer()写到输出流里后,即流中有数据service的read才会执行,不然就会一直停在read()那里等数据。

9.还要让服务器端可以同时连接多个client,即服务器端用new thread()来作数据读取操作。

源码:

客户端(pc端):

testPcClient.java

[java]view plaincopyimportjava.io.BufferedInputStream; importjava.io.BufferedOutputStream; importjava.io.BufferedReader; importjava.io.ByteArrayOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; .InetAddress; .Socket; .UnknownHostException; publicclasstestPcClient{ /** *@paramargs *@throwsInterruptedException */ publicstaticvoidmain(String[]args)throwsInterruptedException{ try{ Runtime.getRuntime().exec( "adbshellambroadcast-aNotifyServiceStop"); Thread.sleep(3000); Runtime.getRuntime().exec("adbforwardtcp:12580tcp:10086"); Thread.sleep(3000); Runtime.getRuntime().exec( "adbshellambroadcast-aNotifyServiceStart"); Thread.sleep(3000); }catch(IOExceptione3){ e3.printStackTrace(); } Socketsocket=null; try{ InetAddressserverAddr=null; serverAddr=InetAddress.getByName("127.0.0.1"); System.out.println("TCP1111"+"C:Connecting..."); socket=newSocket(serverAddr,12580); Stringstr="hi,wufenglong"; System.out.println("TCP221122"+"C:RECEIVE"); BufferedOutputStreamout=newBufferedOutputStream(socket .getOutputStream()); BufferedInputStreamin=newBufferedInputStream(socket .getInputStream()); BufferedReaderbr=newBufferedReader(newInputStreamReader( System.in)); booleanflag=true; while(flag){ System.out.print("请输入1~6的数字,退出输入exit:"); StringstrWord=br.readLine();//从控制台输入1~6 if(strWord.equals("1")){ out.write("1".getBytes()); out.flush(); System.out.println("1finishsendingthedata"); StringstrFormsocket=readFromSocket(in); System.out.println("thedatasentbyserveris:/r/n" +strFormsocket); System.out .println("============================================="); }elseif(strWord.equals("2")){ out.write("2".getBytes()); out.flush(); System.out.println("2finishsendingthedata"); StringstrFormsocket=readFromSocket(in); System.out.println("thedatasentbyserveris:/r/n" +strFormsocket); System.out .println("============================================="); }elseif(strWord.equals("3")){ out.write("3".getBytes()); out.flush(); System.out.println("3finishsendingthedata"); StringstrFormsocket=readFromSocket(in); System.out.println("thedatasentbyserveris:/r/n" +strFormsocket); System.out .println("============================================="); }elseif(strWord.equals("4")){ /*发送命令*/ out.write("4".getBytes()); out.flush(); System.out.println("sendfilefinishsendingtheCMD:"); /*服务器反馈:准备接收*/ StringstrFormsocket=readFromSocket(in); System.out .println("servicereadyreceicedata:UPDATE_CONTACTS:" +strFormsocket); byte[]filebytes=FileHelper.readFile("R0013340.JPG"); System.out.println("filesize="+filebytes.length); /*将整数转成4字节byte数组*/ byte[]filelength=newbyte[4]; filelength=tools.intToByte(filebytes.length); /*将.apk字符串转成4字节byte数组*/ byte[]fileformat=null; fileformat=".apk".getBytes(); System.out .println("fileformatlength="+fileformat.length); /*字节流中前4字节为文件长度,4字节文件格式,以后是文件流*/ /*注意如果write里的byte[]超过socket的缓存,系统自动分包写过去,所以对方要循环写完*/ out.write(filelength); out.flush(); Stringstrok1=readFromSocket(in); System.out.println("servicereceivefilelength:"+strok1); //out.write(fileformat); //out.flush(); //Stringstrok2=readFromSocket(in); //System.out.println("servicereceivefileformat:"+ //strok2); System.out.println("writedatatoandroid"); out.write(filebytes); out.flush(); System.out.println("*********"); /*服务器反馈:接收成功*/ Stringstrread=readFromSocket(in); System.out.println("senddatasuccess:"+strread); System.out .println("============================================="); }elseif(strWord.equalsIgnoreCase("EXIT")){ out.write("EXIT".getBytes()); out.flush(); System.out.println("EXITfinishsendingthedata"); StringstrFormsocket=readFromSocket(in); System.out.println("thedatasentbyserveris:/r/n" +strFormsocket); flag=false; System.out .println("============================================="); } } }catch(UnknownHostExceptione1){ System.out.println("TCP331133"+"ERROR:"+e1.toString()); }catch(Exceptione2){ System.out.println("TCP441144"+"ERROR:"+e2.toString()); }finally{ try{ if(socket!=null){ socket.close(); System.out.println("socket.close()"); } }catch(IOExceptione){ System.out.println("TCP5555"+"ERROR:"+e.toString()); } } } /*从InputStream流中读数据*/ publicstaticStringreadFromSocket(InputStreamin){ intMAX_BUFFER_BYTES=4000; Stringmsg=""; byte[]tempbuffer=newbyte[MAX_BUFFER_BYTES]; try{ intnumReadedBytes=in.read(tempbuffer,0,tempbuffer.length); msg=newString(tempbuffer,0,numReadedBytes,"utf-8"); tempbuffer=null; }catch(Exceptione){ e.printStackTrace(); } //Log.v(Service139.TAG,"msg="+msg); returnmsg; } }

android服务器端:

主类androidService.java

[java]view plaincopypackagecom.otheri.service; importjava.io.File; importjava.io.IOException; .ServerSocket; .Socket; importandroid.app.Service; importandroid.content.BroadcastReceiver; importandroid.content.Context; importandroid.content.Intent; importandroid.content.IntentFilter; importandroid.os.IBinder; importandroid.util.Log; /** *设置:android手机 * * **/ publicclassandroidServiceextendsService{ publicstaticfinalStringTAG="TAG"; publicstaticBooleanmainThreadFlag=true; publicstaticBooleanioThreadFlag=true; ServerSocketserverSocket=null; finalintSERVER_PORT=10086; FiletestFile; privatesysBroadcastReceiversysBR; @Override publicvoidonCreate(){ super.onCreate(); Log.v(TAG,Thread.currentThread().getName()+"---->"+"onCreate"); /*创建内部类sysBroadcastReceiver并注册registerReceiver*/ sysRegisterReceiver(); newThread(){ publicvoidrun(){ doListen(); }; }.start(); } privatevoiddoListen(){ Log.d(TAG,Thread.currentThread().getName()+"---->" +"doListen()START"); serverSocket=null; try{ Log.d(TAG,Thread.currentThread().getName()+"---->" +"doListen()newserverSocket"); serverSocket=newServerSocket(SERVER_PORT); booleanmainThreadFlag=true; while(mainThreadFlag){ Log.d(TAG,Thread.currentThread().getName()+"---->" +"doListen()listen"); Socketclient=serverSocket.accept(); newThread(newThreadReadWriterIOSocket(this,client)).start(); } }catch(IOExceptione1){ Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"newserverSocketerror"); e1.printStackTrace(); } } /*创建内部类sysBroadcastReceiver并注册registerReceiver*/ privatevoidsysRegisterReceiver(){ Log.v(TAG,Thread.currentThread().getName()+"---->" +"sysRegisterReceiver"); sysBR=newsysBroadcastReceiver(); /*注册BroadcastReceiver*/ IntentFilterfilter1=newIntentFilter(); /*新的应用程序被安装到了设备上的广播*/ filter1.addAction("android.intent.action.PACKAGE_ADDED"); filter1.addDataScheme("package"); filter1.addAction("android.intent.action.PACKAGE_REMOVED"); filter1.addDataScheme("package"); registerReceiver(sysBR,filter1); } /*内部类:BroadcastReceiver用于接收系统事件*/ privateclasssysBroadcastReceiverextendsBroadcastReceiver{ @Override publicvoidonReceive(Contextcontext,Intentintent){ Stringaction=intent.getAction(); if(action.equalsIgnoreCase("android.intent.action.PACKAGE_ADDED")){ //ReadInstalledAPP(); }elseif(action .equalsIgnoreCase("android.intent.action.PACKAGE_REMOVED")){ //ReadInstalledAPP(); } Log.v(TAG,Thread.currentThread().getName()+"---->" +"sysBroadcastReceiveronReceive"); } } @Override publicvoidonDestroy(){ super.onDestroy(); //关闭线程 mainThreadFlag=false; ioThreadFlag=false; //关闭服务器 try{ Log.v(TAG,Thread.currentThread().getName()+"---->" +"serverSocket.close()"); serverSocket.close(); }catch(IOExceptione){ e.printStackTrace(); } Log.v(TAG,Thread.currentThread().getName()+"---->" +"****************onDestroy****************"); } @Override publicvoidonStart(Intentintent,intstartId){ Log.d(TAG,Thread.currentThread().getName()+"---->"+"onStart()"); super.onStart(intent,startId); } @Override publicIBinderonBind(Intentarg0){ Log.d(TAG,"onBind"); returnnull; } }

用于接收PC发来的Broastcast并启动主类service的ServiceBroadcastReceiver.java

[java]view plaincopypackagecom.otheri.service; importandroid.content.BroadcastReceiver; importandroid.content.Context; importandroid.content.Intent; importandroid.util.Log; publicclassServiceBroadcastReceiverextendsBroadcastReceiver{ privatestaticStringSTART_ACTION="NotifyServiceStart"; privatestaticStringSTOP_ACTION="NotifyServiceStop"; @Override publicvoidonReceive(Contextcontext,Intentintent){ Log.d(androidService.TAG,Thread.currentThread().getName()+"---->" +"ServiceBroadcastReceiveronReceive"); Stringaction=intent.getAction(); if(START_ACTION.equalsIgnoreCase(action)){ context.startService(newIntent(context,androidService.class)); Log.d(androidService.TAG,Thread.currentThread().getName()+"---->" +"ServiceBroadcastReceiveronReceivestartend"); }elseif(STOP_ACTION.equalsIgnoreCase(action)){ context.stopService(newIntent(context,androidService.class)); Log.d(androidService.TAG,Thread.currentThread().getName()+"---->" +"ServiceBroadcastReceiveronReceivestopend"); } } }

用于新socket连接的读写线程类ThreadReadWriterIOSocket.java

[java]view plaincopypackagecom.otheri.service; importjava.io.BufferedInputStream; importjava.io.BufferedOutputStream; importjava.io.ByteArrayOutputStream; importjava.io.File; importjava.io.IOException; importjava.io.InputStream; importjava.io.OutputStream; .Socket; importandroid.content.Context; importandroid.util.Log; importcom.otheri.util.FileHelper; importcom.otheri.util.MyUtil; /** *功能:用于socket的交互 * */ publicclassThreadReadWriterIOSocketimplementsRunnable{ privateSocketclient; privateContextcontext; ThreadReadWriterIOSocket(Contextcontext,Socketclient){ this.client=client; this.context=context; } @Override publicvoidrun(){ Log.d(androidService.TAG,Thread.currentThread().getName()+"---->" +"aclienthasconnectedtoserver!"); BufferedOutputStreamout; BufferedInputStreamin; try{ /*PC端发来的数据msg*/ StringcurrCMD=""; out=newBufferedOutputStream(client.getOutputStream()); in=newBufferedInputStream(client.getInputStream()); //testSocket();//测试socket方法 androidService.ioThreadFlag=true; while(androidService.ioThreadFlag){ try{ if(!client.isConnected()){ break; } /*接收PC发来的数据*/ Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"willread......"); /*读操作命令*/ currCMD=readCMDFromSocket(in); Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"**currCMD===="+currCMD); /*根据命令分别处理数据*/ if(currCMD.equals("1")){ out.write("OK".getBytes()); out.flush(); }elseif(currCMD.equals("2")){ out.write("OK".getBytes()); out.flush(); }elseif(currCMD.equals("3")){ out.write("OK".getBytes()); out.flush(); }elseif(currCMD.equals("4")){ /*准备接收文件数据*/ try{ out.write("servicereceiveOK".getBytes()); out.flush(); }catch(IOExceptione){ e.printStackTrace(); } /*接收文件数据,4字节文件长度,4字节文件格式,其后是文件数据*/ byte[]filelength=newbyte[4]; byte[]fileformat=newbyte[4]; byte[]filebytes=null; /*从socket流中读取完整文件数据*/ filebytes=receiveFileFromSocket(in,out,filelength, fileformat); //Log.v(Service139.TAG,"receivedata="+new //String(filebytes)); try{ /*生成文件*/ Filefile=FileHelper.newFile("R0013340.JPG"); FileHelper.writeFile(file,filebytes,0, filebytes.length); }catch(IOExceptione){ e.printStackTrace(); } }elseif(currCMD.equals("exit")){ } }catch(Exceptione){ //try{//out.write("error".getBytes("utf-8")); //out.flush(); //}catch(IOExceptione1){//e1.printStackTrace(); //} Log.e(androidService.TAG,Thread.currentThread().getName() +"---->"+"readwriteerror111111"); } } out.close(); in.close(); }catch(Exceptione){ Log.e(androidService.TAG,Thread.currentThread().getName() +"---->"+"readwriteerror222222"); e.printStackTrace(); }finally{ try{ if(client!=null){ Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"client.close()"); client.close(); } }catch(IOExceptione){ Log.e(androidService.TAG,Thread.currentThread().getName() +"---->"+"readwriteerror333333"); e.printStackTrace(); } } } /** *功能:从socket流中读取完整文件数据 * *InputStreamin:socket输入流 * *byte[]filelength:流的前4个字节存储要转送的文件的字节数 * *byte[]fileformat:流的前5-8字节存储要转送的文件的格式(如.apk) * **/ publicstaticbyte[]receiveFileFromSocket(InputStreamin, OutputStreamout,byte[]filelength,byte[]fileformat){ byte[]filebytes=null;//文件数据 try{ in.read(filelength);//读文件长度 intfilelen=MyUtil.bytesToInt(filelength);//文件长度从4字节byte[]转成Int Stringstrtmp="readfilelengthok:"+filelen; out.write(strtmp.getBytes("utf-8")); out.flush(); filebytes=newbyte[filelen]; intpos=0; intrcvLen=0; while((rcvLen=in.read(filebytes,pos,filelen-pos))>0){ pos+=rcvLen; } Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"readfileOK:filesize="+filebytes.length); out.write("readfileok".getBytes("utf-8")); out.flush(); }catch(Exceptione){ Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"receiveFileFromSocketerror"); e.printStackTrace(); } returnfilebytes; } /*读取命令*/ publicstaticStringreadCMDFromSocket(InputStreamin){ intMAX_BUFFER_BYTES=2048; Stringmsg=""; byte[]tempbuffer=newbyte[MAX_BUFFER_BYTES]; try{ intnumReadedBytes=in.read(tempbuffer,0,tempbuffer.length); msg=newString(tempbuffer,0,numReadedBytes,"utf-8"); tempbuffer=null; }catch(Exceptione){ Log.v(androidService.TAG,Thread.currentThread().getName() +"---->"+"readFromSocketerror"); e.printStackTrace(); } //Log.v(Service139.TAG,"msg="+msg); returnmsg; } }

后面是两个辅助类:

[java]view plaincopypackagecom.otheri.util; importjava.io.BufferedInputStream; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileOutputStream; importjava.io.IOException; importcom.otheri.service.androidService; importandroid.util.Log; publicclassFileHelper{ //privatestaticStringFILEPATH="/data/local/tmp"; privatestaticStringFILEPATH="/sdcard"; //privatestaticStringFILEPATH="/tmp"; publicstaticFilenewFile(StringfileName){ Filefile=null; try{ file=newFile(FILEPATH,fileName); file.delete(); file.createNewFile(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnfile; } publicstaticvoidwriteFile(Filefile,byte[]data,intoffset,intcount) throwsIOException{ FileOutputStreamfos=newFileOutputStream(file,true); fos.write(data,offset,count); fos.flush(); fos.close(); } publicstaticbyte[]readFile(StringfileName)throwsIOException{ Filefile=newFile(FILEPATH,fileName); file.createNewFile(); FileInputStreamfis=newFileInputStream(file); BufferedInputStreambis=newBufferedInputStream(fis); intleng=bis.available(); Log.v(androidService.TAG,"filesize="+leng); byte[]b=newbyte[leng]; bis.read(b,0,leng); //Inputin=newInput(fis); //byte[]ret=in.readAll(); //in.close(); bis.close(); returnb; } }[java]view plaincopypackagecom.otheri.util; importjava.io.InputStream; importandroid.util.Log; importcom.otheri.service.androidService; publicclassMyUtil{ /*byte[]转Int*/ publicstaticintbytesToInt(byte[]bytes){ intaddr=bytes[0]&0xFF; addr|=((bytes[1]<<8)&0xFF00); addr|=((bytes[2]<<16)&0xFF0000); addr|=((bytes[3]<<24)&0xFF000000); returnaddr; } /*Int转byte[]*/ publicstaticbyte[]intToByte(inti){ byte[]abyte0=newbyte[4]; abyte0[0]=(byte)(0xff&i); abyte0[1]=(byte)((0xff00&i)>>8); abyte0[2]=(byte)((0xff0000&i)>>16); abyte0[3]=(byte)((0xff000000&i)>>24); returnabyte0; }}

求的人太多了,我直接上传资源吧,喜欢的就可以下载

/detail/by317966834/6413139

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。