java mina长连接短连接_MINA实现TCP长连接(四)——断开重连

该博客介绍了如何使用MINA框架在Android客户端实现TCP长连接的断开重连机制。通过设置IoServiceListener监听连接状态,并在连接断开时启动重连逻辑,配合特定的重连时间和间隔,实现了客户端的自动重连功能。文中提供了相关代码示例,包括`TmClientConfig`和`TmClientManager`类的使用,以及在`Activity`中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

### 前言

之前已经对`mina`实现`tcp长连接`做了些相关讲解了,大家有兴趣的话,可以参看以下链接

[MINA实现TCP长连接(一)——客户端实现](http://www.demodashi.com/demo/17198.html)

[MINA实现TCP长连接(二)——服务端实现](http://www.demodashi.com/demo/17207.html)

[MINA实现TCP长连接(三)——数据断包粘包问题](http://www.demodashi.com/demo/17208.html)

这节就让我们来了解下客户端的`断开重连`机制吧

今天涉及以下内容:

1. mina官网及实现客户端需要的jar包

2. 客户端实现重连接涉及到的几个类

3. 重连接在Activity中的使用

4. 效果图和项目结构图

先来波效果图

![image.png](/contentImages/image/20200628/1jtqFyDNuiAFk0Mj4ps.png)

![image.png](/contentImages/image/20200628/XCpPw7XrTiMiXcCfcgX.png)

#### 一.mina官网及实现客户端需要的jar包

`mina`是一个通讯长连接框架,其官网如下:

[mina官网](http://mina.apache.org/)

利用`mina`实现`tcp长连接客户端`需要以下`jar`包:

```

mina-core-2.0.16.jar

slf4j-android-1.7.21.jar

slf4j-api-1.7.21.jar

```

下载地址:[mina_tcp客户端jar.zip](https://download.youkuaiyun.com/download/Burn_yourself/12542994)

大家将以上jar下载下来,然后导入到自己的项目中。

#### 二.客户端实现重连接涉及到的几个类

客户端重连的话主要涉及两个类:

- ClientReConnectListener:实现IoServiceListener接口,主要用于监听链接断开状态

- TmClientManager:其中提供断开重连的具体逻辑

#### 三.重连接在Activity中的使用

下面来看看`TmClientManager`,`TmClientConfig`等类在`Activity`中实现的断开重连通讯功能,下面贴出`TempActivity`代码:

```

/**

* Title:测试界面

* description:

* autor:pei

* created on 2020/6/2

*/

public class TempActivity extends AppCompatActivity implements View.OnClickListener{

private TextView mTv;

private Button mBtn1;

private Button mBtn2;

//声明tcp客户端操作对象和配置对象

private TmClientConfig mConfig;

private TmClientManager mTmClientManager;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_temp);

//初始化控件

initView();

//初始化数据

initData();

//设置监听

setListener();

}

/**初始化控件**/

private void initView(){

mTv=findViewById(R.id.tv);

mBtn1=findViewById(R.id.btn1);

mBtn2=findViewById(R.id.btn2);

}

/**初始化数据**/

private void initData() {

//初始化tcp配置

mConfig = new TmClientConfig.Builder(TempActivity.this)

.setIp("192.168.9.104")//设置服务端ip

.setPort(9124)//设置端口(0-65535)之间

// .setConnectTimeOut(30000)//设置连接超时时间,单位毫秒,默认30000,即30秒

// .setCharsetName("UTF-8")//设置字符集,默认为 “UTF-8”

// .setReadBufferSize(2048)//设置接收数据缓存区,默认2048

.setReconnect(true)//是否开启断开重连,默认false,即关闭

.setRcDelayTime(3000)//设置重连时间间隔,默认3秒(开启断开重连后生效)

//设置mina客户端接收数据监听

.setCmrListener(new TmClientHandler.OnMessageReceivedListener() {

@Override

public void messageReceived(IoSession session, Object message) {

//接收服务端消息

//......

LogUtil.i("======我是服务端返回消息==message=" + message.toString());

runOnUiThread(new Runnable() {

@Override

public void run() {

mTv.setText(message.toString());

}

});

}

}).build();

//初始化操作对象

mTmClientManager = new TmClientManager(mConfig);

}

/**设置监听**/

private void setListener(){

mBtn1.setOnClickListener(this);

mBtn2.setOnClickListener(this);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn1://测试1

LogUtil.i("=======测试====1===");

test();

break;

case R.id.btn2://测试2

String result="我是中国人啊你是谁,我是亚瑟,你知道么,大家好一切都号";

String result1="abc";

//给服务端发送消息

SessionManager.getInstance().writeToServer(result1);

break;

default:

break;

}

}

@Override

protected void onDestroy() {

super.onDestroy();

//断开连接

mTmClientManager.disConnect();

}

/**测试**/

private void test(){

ToastUtil.shortShow("准备连接啊");

new Thread(new Runnable() {

@Override

public void run() {

//连接服务端

mTmClientManager.connect();

}

}).start();

}

}

```

主要是

```

.setReconnect(true)//是否开启断开重连,默认false,即关闭

.setRcDelayTime(3000)//设置重连时间间隔,默认3秒(开启断开重连后生效)

```

两个参数设置实现断开重连机制。具体处理已经封装到`TmClientManager`类中了。

ok,今天的内容就介绍到这里了,谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值