gpt4 book ai didi

java - java.net.Socket 中的 Apache Mina 服务器和客户端

转载 作者:行者123 更新时间:2023-12-02 07:27:07 26 4
gpt4 key购买 nike

我的应用程序将数据发送到 Apache Mina 服务器,该服务器使用以下配置进行监听。


IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
//acceptor.getFilterChain().addLast( "logger1", new TempFilter());
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
acceptor.setHandler( new TimeServerHandler() );
acceptor.getSessionConfig().setReadBufferSize( 2048 );
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
acceptor.bind( new InetSocketAddress(PORT) );

这是我用 net.Socket 编写的客户端代码


OutputStream oStrm = socket.getOutputStream();
byte[] byteSendBuffer = (requests[clientNo][j]).getBytes(Charset.forName("UTF-8"));


oStrm.write(byteSendBuffer);
oStrm.flush();

虽然记录器显示已收到消息,服务器处理程序的 messageRecieved() 永远不会被调用。请帮忙。

最佳答案

您正在使用 TextLineCodecFactory 作为协议(protocol)编解码器,它希望您的消息以行分隔符结尾。在unix上是“\n”,在windows上是“\r\n”,在Java上可以通过System.lineSeparator()获得。

当然,TextLineCodecFactory 的可用性取决于您的消息内容。如果您的消息内容中包含行分隔符,则不能使用 TextLineCodecFactory。在这种情况下,您可能想要实现自己的编解码器工厂,该工厂使用特殊字符作为分隔符、固定大小的消息或 type-length-value结构。

关于java - java.net.Socket 中的 Apache Mina 服务器和客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13396078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com