PC客户端与Android服务端的Socket同步通信

上传人:桔**** 文档编号:468334146 上传时间:2023-10-28 格式:DOCX 页数:27 大小:48.68KB
返回 下载 相关 举报
PC客户端与Android服务端的Socket同步通信_第1页
第1页 / 共27页
PC客户端与Android服务端的Socket同步通信_第2页
第2页 / 共27页
PC客户端与Android服务端的Socket同步通信_第3页
第3页 / 共27页
PC客户端与Android服务端的Socket同步通信_第4页
第4页 / 共27页
PC客户端与Android服务端的Socket同步通信_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《PC客户端与Android服务端的Socket同步通信》由会员分享,可在线阅读,更多相关《PC客户端与Android服务端的Socket同步通信(27页珍藏版)》请在金锄头文库上搜索。

1、PC客户端与Android服务端的Socket同步通信(USB)收藏需求:1. 一个android端的service后台运行的程序,作为socket的服务器端;用于接收Pcclient端发来的命令,来处理数据后,把结果发给PCclientPC端程序,作为socket的客户端,用于给android手机端发操作命令难点分析:手机一定要有adb模式,即插上USB线时马上提示的对话框选adb。好多对手机的操作都可以用adb直接作。不过,我发现LGGW880就没有,要去下载个1. android默认手机端的IP为“127.0.0.1”2. 要想联通PC与android手机的sokcet,一定要用adbf

2、orward来作下端口转发才能连上socket.viewplaincopytoclipboardprint?Runtime.getRuntime().exec(adbforwardtcp:12580tcp:10086);Thread.sleep(3000);Runtime.getRuntime().exec(adbforwardtcp:12580tcp:10086);Thread.sleep(3000);android端的service程序Install到手机上容易,但是还要有方法来从PC的client端来启动手机上的service,这个办法可以通过PC端adb命令来发一个Broastcast

3、,手机端再写个接收BroastcastReceive来接收这个Broastcast,在这个BroastcastReceive来启动servicepc端命令:viewplaincopytoclipboardprint?Runtime.getRuntime().exec(adbshellambroadcast-aNotifyServiceStart);Runtime.getRuntime().exec(adbshellambroadcast-aNotifyServiceStart);android端的代码:ServiceBroadcastReceiver.javaviewplaincopytocl

4、ipboardprint?packagecom.otheri.service;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;publicclassServiceBroadcastReceiverextendsBroadcastReceiverprivatestaticStringSTART_ACTION=NotifyServiceStart;privatestaticStringSTOP_ACTIO

5、N=NotifyServiceStop;OverridepublicvoidonReceive(Contextcontext,Intentintent)Log.d(androidService.TAG,Thread.currentThread().getName()+ServiceBroadcastReceiveronReceive);Stringaction=intent.getAction();if(START_ACTION.equalslgnoreCase(action)context.startService(newIntent(context,androidService.class

6、);Log.d(androidService.TAG,Thread.currentThread().getName()+ServiceBroadcastReceiveronReceivestartend);elseif(STOP_ACTION.equalslgnoreCase(action)context.stopService(newIntent(context,androidService.class);Log.d(androidService.TAG,Thread.currentThread().getName()+ServiceBroadcastReceiveronReceivesto

7、pend);packagecom.otheri.service;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;publicclassServiceBroadcastReceiverextendsBroadcastReceiverprivatestaticStringSTART_ACTION=NotifyServiceStart;privatestaticStringSTOP_ACTION=Notif

8、yServiceStop;OverridepublicvoidonReceive(Contextcontext,Intentintent)Log.d(androidService.TAG,Thread.currentThread().getName()+ServiceBroadcastReceiveronReceive);Stringaction=intent.getAction();if(START_ACTION.equalslgnoreCase(action)context.startService(newIntent(context,androidService.class);Log.d

9、(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);由

10、于是USB连接,所以socket就可以设计为一但连接就一直联通,即在newsocket和开完out,in流后,就用个while(true)来循环PC端和android端的读和写android的代码:viewplaincopytoclipboardprint?publicvoidrun()Log.d(androidService.TAG,Thread.currentThread().getName()+aclienthasconnectedtoserver!);BufferedOutputStreamout;BufferedInputStreamin;try/*PC端发来的数据msg*/Stri

11、ngcurrCMD=;out=newBufferedOutputStream(client.getOutputStream();in=newBufferedInputStream(client.getlnputStream();/testSocket();测试socket方法androidService.ioThreadFlag=true;while(androidService.ioThreadFlag)tryif(!client.isConnected()break;/*接收PC发来的数据*/Log.v(androidService.TAG,Thread.currentThread().g

12、etName()+-+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.wr

13、ite(OK.getBytes();out.flush();elseif(currCMD.equals(4)/*准备接收文件数据*/tryout.write(servicereceiveOK.getBytes();out.flush();catch(IOExceptione)e.printStackTrace();件数据*/*接收文件数据,4字节文件长度,4字节文件格式,其后是文bytefilelength=newbyte4;bytefileformat=newbyte4;bytefilebytes=null;/*从socket流中读取完整文件数据*/filebytes=receiveFile

14、FromSocket(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.w

15、rite(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();finallytryif(client!=null)Log.v(androidService.TAG,Thread.currentThread().getName()+-+client.close();client.close();catch(IOExceptione)Log.e(androidService.TAG,Thread.currentThread

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号