Apache Mina + SSL + Android无法正常工作

时间:2013-09-02 00:53:10

标签: java android ssl mina

我正在使用Apache Mina开发一个用于网络IO的Android应用程序。非SSL连接(读取,写入)工作正常,但是一旦我添加SSL过滤器,就会停止工作。 我也尝试过纯SSL套接字,它们工作正常。

这是我的Mina连接代码(在一个单独的网络线程中):

    IoConnector connector = new NioSocketConnector();
    connector.getSessionConfig().setReadBufferSize(2048);
    SocketSessionConfig cfg = (SocketSessionConfig)connector.getSessionConfig();
    cfg.setTcpNoDelay(true);

    SslContextFactory f = new SslContextFactory();
    f.setTrustManagerFactory(new BogusTrustManagerFactory());
    f.setProtocol("SSL");

    try {
      filter = new SslFilter(f.newInstance(), true);
    } catch (Exception e) {
      Log.d(TAG, "Exception: ", e);
      return;
    }
    filter.setUseClientMode(true);

    connector.getFilterChain().addLast("sslFilter", filter);
    connector.getFilterChain().addLast("logger", new LoggingFilter());
    connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("ASCII"))));


    connector.setHandler(new MinaClientHandler());
    ConnectFuture future = connector.connect(new InetSocketAddress("10.0.1.9", 7072));
    future.awaitUninterruptibly();

    if (!future.isConnected())
    {
      Log.d(TAG, "not connected, return");
      return;
    }
    IoSession session = future.getSession();
    session.getConfig().setUseReadOperation(true);
    session.getCloseFuture().awaitUninterruptibly();
    //System.out.println(session.read().getMessage());

    Log.d(TAG, "after writting");
    connector.dispose();

在我的IoHandlerAdapter中,我有以下覆盖:

@Override
public void sessionOpened(IoSession session)
{
  session.write(IoBuffer.wrap(data));  // byte array
}

不是我的实际代码,但它会重现问题。

在服务器端,我看到连接被接受,握手成功。但在客户端,没有任何内容通过套接字发送。我在桌面Java应用程序中尝试了相同的代码,它也可以工作。

此外,如果我在IoSession session = future.getSession();之后移动写入调用,则会发生同样的事情。

有没有人有类似的问题? Android上的Mina是否存在已知问题?我错过了一些会话配置选项吗? 由于普通的SSL套接字有效,这是一种解决方法,但我宁愿不重写我的所有网络代码。

0 个答案:

没有答案