我需要在运行android2.3.4的设备(vr100 casio)上创建一个应用程序 我在运行android 6.0.1的三星galaxy选项卡上测试了我的代码
该程序包括建立一个longpolling异步SSL连接。 我正在使用netty。我已经尝试使用最新版本4.1.0中的一个,但没有成功(更准确地说,这是在galaxy选项卡上工作但在android 2.3.4设备上没有)。 我还尝试将netty降级到3.2.0。为了这个项目的需要,我使用的是android API 10 2.3.3。
我知道连接正在建立并且程序在没有SSL的情况下工作但是只要启用SSL层,就不会发生任何事情。
我的client.java:
Bootstrap b= new Bootstrap();
NioEventLoopGroup workerGroup = new NioEventLoopGroup();
b.group(workerGroup);
b.channel(NioSocketChannel.class);
b.handler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
SslContext sslCtx = null;
try {
sslCtx = SslContextBuilder.forClient().build();
} catch (SSLException e) {
e.printStackTrace();
Journal.e(TAG, "constructionsslCI", e.getMessage());
}
pipeline.addLast("ssl", sslCtx.newHandler(ch.alloc(), SERVEUR, PORT));
ch.pipeline().addLast(new HttpRequestEncoder());
ch.pipeline().addLast(new StringDecoder());
ch.pipeline().addLast(new ClientHandler(SERVEUR, ch));
}
});
doConnect(b);
}
private static void doConnect(final Bootstrap b) {
b.connect(IP, PORT).addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
if (!future.isSuccess()) {
doConnect(b);
}
else {
future.channel().closeFuture().addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
doConnect(b);
}});}}});}}
我发送的信息如下:
while(devicesProvider.getChannel().isActive()==false && devicesProvider.getChannel().isWritable()==false){
}
final ChannelFuture writeFuture =devicesProvider.getChannel().writeAndFlush(request);
writeFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
if(!writeFuture.isSuccess()){
writeFuture.cause().printStackTrace();
}} });