netty ssl连接android 2.3.4

时间:2017-02-28 07:19:48

标签: java android ssl netty

我需要在运行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();
        }} });

0 个答案:

没有答案