我在服务器端使用 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 个套接字中,发送了许多消息。通过使用 IO 套接字类编写的服务器,我能够完美地检索数据。
问题出现在使用 BUFFER 的基于 Apache Mina 的服务器中!我无法收到个别消息。
我如何获取单个消息(鉴于我无法更改客户端中的任何内容,并且单个消息的长度未知)
服务器端代码
套接字创建
public static void main(String[] args) 抛出 IOException,SQLException { System.out.println(Charset.defaultCharset().name()); IoAcceptor 接受器 = new NioSocketAcceptor(); ProtocolCodecFilter(charset.newEncoder(),charset.newDecoder() )); acceptor.setHandler(新的 TimeServerHandler()); acceptor.getSessionConfig().setReadBufferSize(64); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); acceptor.bind(new InetSocketAddress(PORT)); }
处理程序代码
公共无效消息接收(IoSession 会话,对象消息)抛出异常 { AbstractIoBuffer bf = (AbstractIoBuffer) 消息; Charset charset = Charset.forName("UTF-8"); CharsetDecoder 解码器 = charset.newDecoder(); String outString = bf.getString(decoder); }