stock mina框架,自动重连

来源:互联网 发布:共赢网络怎么样 编辑:程序博客网 时间:2024/04/30 07:16

最近在研究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
原创粉丝点击