|
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-723054-79449.html
AndroidSocket今天给大家介绍下一个简单的Android socket库,开发中会遇到socket网络编程,在之前找了些资料自己写了一个简单的socket库,希望能帮到一些开发人员实现简单的业务需求或者能给到一些启发!废话不多说,直接上Code。Eclipse的盆友们直接下载Lib工程导入到自己项目。本文以Androidstudio为例介绍下:添加AndroidSocket 到你的项目Gradle compile 'com.virtue.androidsocket:AndroidSocket:1.0.5Maven com.virtue.androidsocket AndroidSocket 1.0.5 pom 二、配置参数1.在使用之前建一个Service服务,用于socket通讯,在程序的开启后开启服务。记得清单文件注册服务哦/o(* ̄︶ ̄*)ostartService(new Intent(this, MySocketService.class));2.在刚才的服务的onCreate方法中配置连接参数,配置项根据自身服务器协议来定,接收数据完整性支持两种:一种是以字符串作为结束符标记,另一种是以固定长度为结束标记。根据服务器具体情况选一种,如果有其他的结束方式,可后面另行再加。Socketer.getInstance(getApplicationContext()).bindServerContect("123.57.56.201", 20083) //配置socket地址和端口 .setTimeout(15).setEncode("UTF_8") //配置超时时间与编码 .setReceiveType(ReceiveType.SEPARATION_SIGN) //配置接收形式以分隔符接收 .setEndCharSequence("\r\n") //"\r\n"配置结束符 .setMsgLength(1500).start(); //配置一次性最多发送的消息字节数或者or:Socketer.getInstance(getApplicationContext()).bindServerContect("123.57.56.201", 20083) .setTimeout(15).setEncode("UTF_8") .setReceiveType(ReceiveType.FIXED_LENGTH) //配置接收形式以分隔符接收 .setMsgLength(2048) // 配置固定长度大小接收 .setMsgLength(1500).start();三、详细使用说明使用的时候这里分两种类型;一种分为自动解析,另一种是手动解析(本人推荐使用第二种)NO.1 自动解析:包含服务器主推通知和请求响应两种数据如果服务有主推通知消息,你需要注册以下广播 //Set parse to Auto设置自动解析模式 Socketer.getInstance(MainActivity.this).setParseMode(ParseMode.AUTO_PARSE); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BroadCastType.SERVER_NOTICE); MessageReceiver dataReceiver = new MessageReceiver(); registerReceiver(dataReceiver, intentFilter);广播接收如下:@Override public void onReceive(Context context, Intent intent) { if (intent.getAction() == BroadCastType.SERVER_NOTICE) { String dataStr = intent.getStringExtra(BroadCastType.SERVER_NOTICE_DATA); Log.i(TAG, "Data given to me by the server:" dataStr); } }发送请求到服务器Socketer.getInstance(MainActivity.this).sendStrData(reDataStr, "\"seq\":100", new ResponseListener() { @Override public void onSuccess(final String data) { Log.i("Test server data", "callback data:" data); runOnUiThread(new Runnable() { @Override public void run() { tvResponse.setText(data); } }); } @Override public void onFail(int failCode) { Log.e("Test server data", "callback error:" failCode); } });其中参数1代表是请求的数据,参数2代表是返回数据中的唯一标识,可以是请求ID、token值或者能标识唯一性的字符串,如果你不能确定每条回来数据的唯一性,建议使用第二种手动解释数据的模式。这里提醒下请求响应回调是在子线程中,方便大家做一些耗时操作。NO.2 手动解析:没有服务主推通知和请求响应之分,完全由自己自定义解析如果想自己解析响应数据 //Set parse to Manual设置手动解析模式 Socketer.getInstance(MainActivity.this).setParseMode(ParseMode.MANUALLY_PARSE);设置接收监听响应 Socketer.getInstance(MainActivity.this).setOnReceiveListener(new OnReceiveListener() { @Override public void onConnected(Socketer socketer) { } @Override public void onDisconnected(Socketer socketer) { } @Override public void onResponse(final String data) { runOnUiThread(new Runnable() { @Override public void run() { //response data tvResponse.setTextColor(getResources().getColor(R.color.blue)); tvResponse.setText(data); //... your parse ... } }); } });发送数据到服务器,响应和服务器主推通知都会在上面接收回调中处理: Socketer.getInstance(MainActivity.this).sendStrData(reDataStr); //request如有失败情况,失败码参考如下:int SEND_FAIL = 1; //发送失败 (send fail)int TIME_OUT = 2; //发送超时 (overtime)int SEND_TO_LONG = 3; //发送数据过长 (send so long)int DISCONNECT = -1; //连接断开 (disconnected)如果其他不满足或者有问题的地方请大家指出,并提出宝贵的意见。欢迎点赞关注!参考github:https://github.com/Zvirtuey/AndroidSocket 继续阅读全文
想在安卓巴士找到更多优质博文,可移步博客区
如果对本篇文章感兴趣,请前往,
原文地址:http://www.apkbus.com/blog-723054-79449.html
|
|