Я использую Apache Mina на стороне сервера. У меня есть клиент, написанный по традиции IO. Вот код со стороны КЛИЕНТА, который отправляет данные на сервер.
class SomeClass extends Thread
{
Socket socket;
//Constructor
SomeClass()
{
Socket socket = ...
}
public void run()
{
while (j++ & lt; 10)
{
System.out.println("CLIENT[" + clientNo + "] Send Message =>" + requests[clientNo][j]);
OutputStream oStrm = socket.getOutputStream();
byte[] byteSendBuffer = (requests[clientNo][j]).getBytes();
oStrm.write(byteSendBuffer);
oStrm.flush();
}
}
}
Вышеупомянутый поток запускается, скажем, 20 раз. Итак, создано 20 розеток. А в 1 сокет отправляется много сообщений. С сервером, написанным с использованием классов сокетов ввода-вывода, я могу отлично извлекать данные.
Проблема возникает на сервере на базе Apache Mina, который использует БУФЕР! Я не могу получать отдельные сообщения.
Как мне получать отдельные сообщения (учитывая, что я не могу ничего изменить в клиенте, И длина отдельных сообщений неизвестна)
Код на стороне сервера
Создание сокета
public static void main(String[] args) throws IOException, SQLException { System.out.println(Charset.defaultCharset().name()); IoAcceptor acceptor = new NioSocketAcceptor(); ProtocolCodecFilter(charset.newEncoder(),charset.newDecoder() )); acceptor.setHandler( new TimeServerHandler() ); acceptor.getSessionConfig().setReadBufferSize(64 ); acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 ); acceptor.bind( new InetSocketAddress(PORT) ); }
Код обработчика
public void messageReceived(IoSession session, Object message) throws Exception { AbstractIoBuffer bf = (AbstractIoBuffer)message; Charset charset = Charset.forName("UTF-8"); CharsetDecoder decoder = charset.newDecoder(); String outString = bf.getString(decoder); }