登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 237|回复: 0

Android Socket TCP

[复制链接]

1

主题

2

帖子

63

安币

程序猿

Rank: 2

发表于 2019-1-27 21:10:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址: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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表