java mina长连接短连接_MINA实现TCP长连接(四)——断开重连
前言
今天涉及以下內(nèi)容:
mina官網(wǎng)及實(shí)現(xiàn)客戶端需要的jar包
客戶端實(shí)現(xiàn)重連接涉及到的幾個(gè)類
重連接在Activity中的使用
效果圖和項(xiàng)目結(jié)構(gòu)圖
重連接涉及到的類源碼
先來波效果圖
image.png
image.png
一.mina官網(wǎng)及實(shí)現(xiàn)客戶端需要的jar包
mina是一個(gè)通訊長連接框架,其官網(wǎng)如下:
mina官網(wǎng)
利用mina實(shí)現(xiàn)tcp長連接客戶端需要以下jar包:
mina-core-2.0.16.jar
slf4j-android-1.7.21.jar
slf4j-api-1.7.21.jar
下載地址:mina_tcp客戶端jar.zip
大家將以上jar下載下來,然后導(dǎo)入到自己的項(xiàng)目中。
二.客戶端實(shí)現(xiàn)重連接涉及到的幾個(gè)類
客戶端重連的話主要涉及兩個(gè)類:
ClientReConnectListener:實(shí)現(xiàn)IoServiceListener接口,主要用于監(jiān)聽鏈接斷開狀態(tài)
TmClientManager:其中提供斷開重連的具體邏輯
三.重連接在Activity中的使用
下面來看看TmClientManager,TmClientConfig等類在Activity中實(shí)現(xiàn)的斷開重連通訊功能,下面貼出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客戶端操作對(duì)象和配置對(duì)象
private TmClientConfig mConfig;
private TmClientManager mTmClientManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
//初始化控件
initView();
//初始化數(shù)據(jù)
initData();
//設(shè)置監(jiān)聽
setListener();
}
/**初始化控件**/
private void initView(){
mTv=findViewById(R.id.tv);
mBtn1=findViewById(R.id.btn1);
mBtn2=findViewById(R.id.btn2);
}
/**初始化數(shù)據(jù)**/
private void initData() {
//初始化tcp配置
mConfig = new TmClientConfig.Builder(TempActivity.this)
.setIp("192.168.9.104")//設(shè)置服務(wù)端ip
.setPort(9124)//設(shè)置端口(0-65535)之間
// .setConnectTimeOut(30000)//設(shè)置連接超時(shí)時(shí)間,單位毫秒,默認(rèn)30000,即30秒
// .setCharsetName("UTF-8")//設(shè)置字符集,默認(rèn)為 “UTF-8”
// .setReadBufferSize(2048)//設(shè)置接收數(shù)據(jù)緩存區(qū),默認(rèn)2048
.setReconnect(true)//是否開啟斷開重連,默認(rèn)false,即關(guān)閉
.setRcDelayTime(3000)//設(shè)置重連時(shí)間間隔,默認(rèn)3秒(開啟斷開重連后生效)
//設(shè)置mina客戶端接收數(shù)據(jù)監(jiān)聽
.setCmrListener(new TmClientHandler.OnMessageReceivedListener() {
@Override
public void messageReceived(IoSession session, Object message) {
//接收服務(wù)端消息
//......
LogUtil.i("======我是服務(wù)端返回消息==message=" + message.toString());
runOnUiThread(new Runnable() {
@Override
public void run() {
mTv.setText(message.toString());
}
});
}
}).build();
//初始化操作對(duì)象
mTmClientManager = new TmClientManager(mConfig);
}
/**設(shè)置監(jiān)聽**/
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="我是中國人啊你是誰,我是亞瑟,你知道么,大家好一切都號(hào)";
String result1="abc";
//給服務(wù)端發(fā)送消息
SessionManager.getInstance().writeToServer(result1);
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//斷開連接
mTmClientManager.disConnect();
}
/**測試**/
private void test(){
ToastUtil.shortShow("準(zhǔn)備連接啊");
new Thread(new Runnable() {
@Override
public void run() {
//連接服務(wù)端
mTmClientManager.connect();
}
}).start();
}
}
主要是
.setReconnect(true)//是否開啟斷開重連,默認(rèn)false,即關(guān)閉
.setRcDelayTime(3000)//設(shè)置重連時(shí)間間隔,默認(rèn)3秒(開啟斷開重連后生效)
兩個(gè)參數(shù)設(shè)置實(shí)現(xiàn)斷開重連機(jī)制。具體處理已經(jīng)封裝到TmClientManager類中了。
四.效果圖和項(xiàng)目結(jié)構(gòu)圖
image.png
image.png
項(xiàng)目結(jié)構(gòu)圖如下:
image.png
五.重連接涉及到的類源碼
下面貼出重連功能涉及到的兩個(gè)主要類:ClientReConnectListener和TmClientManager,其他代碼的話,大家可以參看我之前的文章。
ClientReConnectListener源碼如下:
總結(jié)
以上是生活随笔為你收集整理的java mina长连接短连接_MINA实现TCP长连接(四)——断开重连的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3des java ecb_PHP 3D
- 下一篇: java 判断int是几位_快速判断一个