首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android + Apache MINA在session.write()之后不运行messageSent()

Android + Apache MINA在session.write()之后不运行messageSent()
EN

Stack Overflow用户
提问于 2015-02-16 19:15:16
回答 2查看 355关注 0票数 1

如果Apache MINA在写入活动会话后不调用messageSent()方法,那会有什么问题呢?我的代码在简单的Java客户端上工作得很好,但在Android应用程序中却不能工作。

TCPClient的代码:

代码语言:javascript
运行
复制
if (session != null && session.isConnected()) {
            throw new IllegalStateException("Already connected. Disconnect first.");
        }

        connector = new NioSocketConnector();
        connector.getSessionConfig().setUseReadOperation(true);

        try {
            SslFilter sslFilter = new SslFilter(ClientSslContextFactory.getInstance());
            sslFilter.setUseClientMode(true);
            connector.getFilterChain().addFirst("sslFilter", sslFilter);

            handler = new TCPHandler();
            connector.setHandler(handler);
            connector.getSessionConfig().setReadBufferSize(4096);

            // try to connect to server
            Log.d(TAG, "Connecting...");
            ConnectFuture future = connector.connect(new InetSocketAddress(Const.hostIP, Const.sessionPort));
            future.addListener(new IoFutureListener<IoFuture>() {

                public void operationComplete(IoFuture future) {
                    ConnectFuture connFuture = (ConnectFuture) future;
                    if(connFuture.isConnected()){
                        Log.d(TAG, "Assigning session...");
                        session = future.getSession();

                    } else {
                        Log.e(TAG, "Not connected...exiting");
                    }
                }
            });
            future.awaitUninterruptibly();
        } catch (RuntimeIoException e) {
            Log.e(TAG, "Failed to connect.");
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            Log.e(TAG, "Failed to connect. Illegal Argument! Terminating program!");
            e.printStackTrace();
        } catch (GeneralSecurityException e) {
            Log.e(TAG, "Failed to set SSL filter!");
            e.printStackTrace();
        }

TCPHandler正在发送代码:

代码语言:javascript
运行
复制
@Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        Log.d(TAG, "Session opened...");

        byte[] ba = ("stringasdfasdf\n").getBytes();
        IoBuffer buffer = IoBuffer.allocate(ba.length);
        buffer.put(ba);
        buffer.flip();
        session.write(buffer);
        Log.d(TAG, "TCP writing executed.");
    }
EN

回答 2

Stack Overflow用户

发布于 2018-12-12 11:45:17

我也有同样的问题,注意到这一点很重要:

代码语言:javascript
运行
复制
@Override
public void sessionCreated(IoSession session) throws Exception {
    Log.d(TAG, "sessionCreated");
    session.setAttribute(SslFilter.USE_NOTIFICATION);
}

一旦添加了session.setAttribute(SslFilter.USE_NOTIFICATION)。它起作用了。

票数 1
EN

Stack Overflow用户

发布于 2016-04-07 18:03:12

connector.connect不能在安卓系统的主线程中运行。您确定session已打开吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28540172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档