参考:https://www.jianshu.com/p/c78b37a2ca47
与安卓交互需要用到 特此记录
public class NettyClient {
public final static String HOST = "192.168.31.178";
public final static int PORT = 9527;
private static EventLoopGroup workerGroup = null;
private Channel channel;
//重连调用的函数
public Channel connect(String host, int port) {
doConnect(host, port);
return this.channel;
}
public void doConnect(String host, int port) {
try {
//设置一个多线程循环器
workerGroup = new NioEventLoopGroup();
//启动附注类
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(workerGroup);
//指定所使用的NIO传输channel
bootstrap.channel(NioSocketChannel.class);
//指定客户端初始化处理
bootstrap.handler(new ClientIniterHandler());
//连接服务
// Channel channel = bootstrap.connect(host, port).sync().channel();
ChannelFuture f = bootstrap.connect(host, port);
f.addListener(new ConnectionListener());
channel = f.channel();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public class ConnectionListener implements ChannelFutureListener {
private NettyClient nettyClient = new NettyClient();
@Override
public void operationComplete(ChannelFuture channelFuture) throws Exception {
if (!channelFuture.isSuccess()) {
final EventLoop loop = channelFuture.channel().eventLoop();
loop.schedule(new Runnable() {
@Override
public void run() {
Log.e("ConnectionListener: " ,"服务端链接不上,开始重连操作.." );
nettyClient.connect(NettyClient.HOST, NettyClient.PORT);
}
}, 1L, TimeUnit.SECONDS);
} else {
Log.e("ConnectionListener: " ,"服务端链接成功..." );
}
}
}
//有异常 关闭
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
super.exceptionCaught(ctx, cause);
ctx.close();
}
//服务端突然挂了
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
Log.e("channelInactive: " ,"掉线了..." );
//使用过程中断线重连
final EventLoop eventLoop = ctx.channel().eventLoop();
eventLoop.schedule(new Runnable() {
@Override
public void run() {
nettyClient.connect(NettyClient.HOST, NettyClient.PORT);
}
}, 1L, TimeUnit.SECONDS);
super.channelInactive(ctx);
}