stock mina框架,自动重连

最近在研究stock 通讯看到mina框架使用起来实在是太简单了,想和大家一起分享一下,多多学习!

贴上主要代码大家可以看一下:

package com.org.mina;


import java.net.InetSocketAddress;


import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;


import android.annotation.SuppressLint;
import android.os.Handler;


public class StockServer {
private static NioSocketConnector connector = new NioSocketConnector();
private DefaultIoFilterChainBuilder chain = connector.getFilterChain();


private static IoSession session;
private static ClientHandler clientHandler;
private static ConnectFuture connectFuture;
private static final String HOST = "192.168.2.203";
private static final int PORT = 4000;
private static final int TIME_OUT = 30;


public StockServer() {
java.lang.System.setProperty("java.net.preferIPv4Stack", "true");
java.lang.System.setProperty("java.net.preferIPv6Addresses", "false");
clientHandler = new ClientHandler(handler);
Thread thread = new Thread(new StockThread());
thread.start();
Thread reconnectThread = new Thread(new RunnableThread());
reconnectThread.start();
}


class StockThread implements Runnable {


@Override
public void run() {
chain.addLast("myChin", new ProtocolCodecFilter(
new ObjectSerializationCodecFactory()));
connector.setHandler(clientHandler);
connector.setConnectTimeoutMillis(TIME_OUT);
InetSocketAddress addr = new InetSocketAddress(HOST, PORT);
connectFuture = connector.connect(addr);
connectFuture.awaitUninterruptibly();
if (connectFuture.isConnected()) {
session = connectFuture.getSession();
System.out.println("连接成功!!!");
}
}
}


public static void sendMessage(String msg, UIListener uiListener) {
if (session != null && session.isConnected()) {
clientHandler.setUIListener(uiListener);
session.write(msg);
} else {
uiListener.refreshUI("服务器连接失败,正在尝试重连");
}
}


class RunnableThread implements Runnable {


@Override
public void run() {
while (true) {
if (session == null || !session.isConnected()) {
try {
Thread.sleep(1000);
InetSocketAddress addr = new InetSocketAddress(HOST,
PORT);
ConnectFuture cf = connector.connect(addr);
cf.awaitUninterruptibly();
if (cf.isConnected()) {
session = cf.getSession();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}


@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
UIListener uiListener = (UIListener) msg.obj;
String message = msg.getData().getString("message");
uiListener.refreshUI(message);
break;
default:
break;
}
};
};
}

有问题的可以给我留言,相互交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值