如果Apache MINA在写入活动会话后不调用messageSent()
方法,那会有什么问题呢?我的代码在简单的Java客户端上工作得很好,但在Android应用程序中却不能工作。
TCPClient的代码:
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正在发送代码:
@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.");
}
发布于 2018-12-12 11:45:17
我也有同样的问题,注意到这一点很重要:
@Override
public void sessionCreated(IoSession session) throws Exception {
Log.d(TAG, "sessionCreated");
session.setAttribute(SslFilter.USE_NOTIFICATION);
}
一旦添加了session.setAttribute(SslFilter.USE_NOTIFICATION)
。它起作用了。
发布于 2016-04-07 18:03:12
connector.connect
不能在安卓系统的主线程中运行。您确定session
已打开吗?
https://stackoverflow.com/questions/28540172
复制相似问题