版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】OkSocket与Android怎么用
OkSocket简介Maven配置allprojects
{
repositories
{
jcenter()
}
}dependencies
{
compile
'com.tonystark.android:socket:1.0.0'
}参数配置<uses-permission
android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>-dontwarn
com.xuhao.android.libsocket.**
-keep
class
com.xuhao.android.socket.impl.abilities.**
{
*;
}
-keep
class
com.xuhao.android.socket.impl.exceptions.**
{
*;
}
-keep
class
com.xuhao.android.socket.impl.EnvironmentalManager
{
*;
}
-keep
class
com.xuhao.android.socket.impl.BlockConnectionManager
{
*;
}
-keep
class
com.xuhao.android.socket.impl.UnBlockConnectionManager
{
*;
}
-keep
class
com.xuhao.android.socket.impl.SocketActionHandler
{
*;
}
-keep
class
com.xuhao.android.socket.impl.PulseManager
{
*;
}
-keep
class
com.xuhao.android.socket.impl.ManagerHolder
{
*;
}
-keep
class
erfaces.**
{
*;
}
-keep
class
com.xuhao.android.socket.sdk.**
{
*;
}
#
枚举类不能被混淆
-keepclassmembers
enum
*
{
public
static
**[]
values();
public
static
**
valueOf(java.lang.String);
}
-keep
class
com.xuhao.android.socket.sdk.OkSocketOptions$*
{
*;
}OkSocket初始化public
class
MyApplication
extends
Application
{
@Override
public
void
onCreate()
{
super.onCreate();
//在主进程初始化一次,多进程时需要区分主进程.
OkSocket.initialize(this);
//如果需要开启Socket调试日志,请配置
//OkSocket.initialize(this,true);
}
}调用演示简单的长连接ConnectionManager
主要负责该地址的套接字连接断开发送消息等操作.
//连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样
ConnectionInfo
info
=
new
ConnectionInfo("37",
8080);
//调用OkSocket,开启这次连接的通道,调用通道的连接方法进行连接.
OkSocket.open(info).connect();有回调的长连接//连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样
ConnectionInfo
info
=
new
ConnectionInfo("37",
8080);
//调用OkSocket,开启这次连接的通道,拿到通道Manager
IConnectionManager
manager
=
OkSocket.open(info);
//注册Socket行为监听器,SocketActionAdapter是回调的Simple类,其他回调方法请参阅类文档
manager.registerReceiver(new
SocketActionAdapter(){
@Override
public
void
onSocketConnectionSuccess(Context
context,
ConnectionInfo
info,
String
action)
{
Toast.makeText(context,
"连接成功",
LENGTH_SHORT).show();
}
});
//调用通道进行连接
manager.connect();可配置的长连接//连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样
ConnectionInfo
info
=
new
ConnectionInfo("37",
8080);
//调用OkSocket,开启这次连接的通道,拿到通道Manager
IConnectionManager
manager
=
OkSocket.open(info);
//获得当前连接通道的参配对象
OkSocketOptions
options=
manager.getOption();
//基于当前参配对象构建一个参配建造者类
OkSocketOptions.Builder
builder
=
new
OkSocketOptions.Builder(options);
//修改参配设置(其他参配请参阅类文档)
builder.setSinglePackageBytes(size);
//建造一个新的参配对象并且付给通道
manager.option(builder.build());
//调用通道进行连接
manager.connect();如何进行数据发送//类A:
//...定义将要发送的数据结构体...
public
class
TestSendData
implements
ISendable
{
private
String
str
=
"";
public
TestSendData()
{
JSONObject
jsonObject
=
new
JSONObject();
try
{
jsonObject.put("cmd",
14);
jsonObject.put("data",
"{x:2,y:1}");
str
=
jsonObject.toString();
}
catch
(JSONException
e)
{
e.printStackTrace();
}
}
@Override
public
byte[]
parse()
{
//根据服务器的解析规则,构建byte数组
byte[]
body
=
str.getBytes(Charset.defaultCharset());
ByteBuffer
bb
=
ByteBuffer.allocate(4
+
body.length);
bb.order(ByteOrder.BIG_ENDIAN);
bb.putInt(body.length);
bb.put(body);
return
bb.array();
}
}
//类B:
private
IConnectionManager
mManager;
//...省略连接及设置回调的代码...
@Override
public
void
onSocketConnectionSuccess(Context
context,
ConnectionInfo
info,
String
action)
{
//连接成功其他操作...
//链式编程调用
OkSocket.open(info)
.send(new
TestSendData());
//此处也可将ConnectManager保存成成员变量使用.
mManager
=
OkSocket.open(info);
if(mManager
!=
null){
mManager.send(new
TestSendData());
}
//以上两种方法选择其一,成员变量的方式请注意判空
}如何接收数据
/upload/information/20200623/125/126002.png//设置自定义解析头
OkSocketOptions.Builder
okOptionsBuilder
=
new
OkSocketOptions.Builder(mOkOptions);
okOptionsBuilder.setHeaderProtocol(new
IHeaderProtocol()
{
@Override
public
int
getHeaderLength()
{
//返回自定义的包头长度,框架会解析该长度的包头
return
0;
}
@Override
public
int
getBodyLength(byte[]
header,
ByteOrder
byteOrder)
{
//从header(包头数据)中解析出包体的长度,byteOrder是你在参配中配置的字节序,可以使用ByteBuffer比较方便解析
return
0;
}
});
//将新的修改后的参配设置给连接管理器
mManager.option(okOptionsBuilder.build());
//...正确设置解析头之后...
@Override
public
void
onSocketReadResponse(Context
context,
ConnectionInfo
info,
String
action,
OriginalData
data)
{
//遵循以上规则,这个回调才可以正常收到服务器返回的数据,数据在OriginalData中,为byte[]数组,该数组数据已经处理过字节序问题,直接放入ByteBuffer中即可使用
}如何保持心跳//类A:
//...定义心跳管理器需要的心跳数据类型...
public
class
PulseData
implements
IPulseSendable
{
private
String
str
=
"pulse";
@Override
public
byte[]
parse()
{
byte[]
body
=
str.getBytes(Charset.defaultCharset());
ByteBuffer
bb
=
ByteBuffer.allocate(4
+
body.length);
bb.order(ByteOrder.BIG_ENDIAN);
bb.putInt(body.length);
bb.put(body);
return
bb.array();
}
}
//类B:
private
IConnectionManager
mManager;
private
PulseData
mPulseData
=
new
PulseData;
//...省略连接及设置回调的代码...
@Override
public
void
onSocketConnectionSuccess(Context
context,
ConnectionInfo
info,
String
action)
{
//连接成功其他操作...
//链式编程调用,给心跳管理器设置心跳数据,一个连接只有一个心跳管理器,因此数据只用设置一次,如果断开请再次设置.
OkSocket.open(info)
.getPulseManager()
.setPulseSendable(mPulseData)
.pulse();//开始心跳,开始心跳后,心跳管理器会自动进行心跳触发
//此处也可将ConnectManager保存成成员变量使用.
mManager
=
OkSocket.open(info);
if(mManager
!=
null){
PulseManager
pulseManager
=
mManager.getPulseManager();
//给心跳管理器设置心跳数据,一个连接只有一个心跳管理器,因此数据只用设置一次,如果断开请再次设置.
pulseManager.setPulseSendable(mPulseData);
//开始心跳,开始心跳后,心跳管理器会自动进行心跳触发
pulseManager.pulse();
}
//以上两种方法选择其一,成员变量的方式请注意判空
}心跳接收到了之后需要进行喂狗//定义成员变量
private
IConnectionManager
mManager;
//当客户端收到消息后
@Override
public
void
onSocketReadResponse(Context
context,
ConnectionInfo
info,
String
action,
OriginalData
data)
{
if(mManager
!=
null
&&
是心跳返回包){//是否是心跳返回包,需要解析服务器返回的数据才可知道
//喂狗操作
mManager.getPulseManager().feed();
}
}//定义成员变量
private
IConnectionManager
mManager;
//...在任意地方...
mManager
=
OkSocket.open(info);
if(mManager
!=
null){
PulseManager
pu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四季度工作安排领导讲话三篇
- 生产专利许可使用合同(33篇)
- 有关文明养犬倡议书范文(31篇)
- 感恩教育300字心得体会(35篇)
- 21.2.2 二次函数y=ax2+bx+c的图象和性质 同步练习
- 江苏省苏州市姑苏区2024-2025学年八年级上学期期中考试历史卷(含答案)
- 湖南省衡阳市2024-2025学年高一上学期期中物理试题(无答案)
- 广西玉林市2024-2025学年八年级上学期期中教学质量监测物理试卷
- (教研室)山东省临沂市费县2024-2025学年七年级上学期期中考试生物试题
- 2022年高考语文复习专项训练:论述类文本阅读
- GB/T 26704-2022铅笔
- YY/T 0729.2-2009组织粘合剂粘接性能试验方法第2部分:T-剥离拉伸承载强度
- GB/T 30889-2014冻虾
- 法律援助-课件(PPT讲义讲稿)
- GB/T 18745-2006地理标志产品武夷岩茶
- GB/T 11822-2008科学技术档案案卷构成的一般要求
- 《电信网络诈骗罪问题研究》开题报告文献综述3000字
- CSCCP宫颈细胞病理学理论考试题
- 大麦营养特点及利用
- 五年级数学上册苏教版《小数乘整数》课件(区级公开课)
- 812天津滨海新区爆炸事故事故的案例分析的报告共课件
评论
0/150
提交评论