mina 客户端无法得到服务器的返回值

2024-03-24 04:38

本文主要是介绍mina 客户端无法得到服务器的返回值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.客户端和服务器的使用的过滤器不一致
例如:
服务器端:

// 添加编、解码器
ACCEPTOR.getFilterChain().addLast("codec",new ProtocolCodecFilter(new WSFCodecFactory()));
// 设置处理客户端消息的处理类
ACCEPTOR.setHandler(new WSFServerHandler());
ACCEPTOR.getSessionConfig().setReadBufferSize(1024);
ACCEPTOR.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
ACCEPTOR.bind(new InetSocketAddress(Constant.SERVICE_TCP_PORT));

客户端:

NioSocketConnector connector = new NioSocketConnector();connector.getFilterChain().addLast("encode",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));connector.getSessionConfig().setReadBufferSize(2048);
connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
connector.setConnectTimeoutMillis(30000);
connector.setHandler(new SendMsgClientHandler());

2.解析的规则导致信息无法被服务端正确解析而无法回传值
例如:

@Overrideprotected boolean doDecode(IoSession session, IoBuffer in,ProtocolDecoderOutput out) throws Exception {// 把接收到的 byte 存放到 byte 数组中byte[] bytes = new byte[in.limit()];for (int i = 0; i < bytes.length; i++) {bytes[i] = in.get();}// 如果长度小于 16 不予处理:根据需要进行调整if (bytes.length < Constant.PROTOCOL_LENGTH_WITHOUT_CONTENT) {in.rewind();//注意这些地方因为有返回会导致return false;}// 获取数据长度Short dataLength = shortByte(bytes[1], bytes[2]);// 获取命令类型// 取出数据,1.数据的开头、结尾要跟协议定义的一致 2.数据的长度要跟定义的一致logger.info("命令长度:" + dataLength + ",命令类型:" + bytes[5]);if (bytes[0] != Constant.PROTOCOL_HEAD|| bytes[bytes.length - 1] != Constant.PROTOCOL_FOOT|| bytes.length != dataLength) {in.rewind();return false;}// 打印日志logger.info(IoBuffer.wrap(bytes).getHexDump());// 构造 消息对象WSFMessage message = new WSFMessage();out.write(message);return true;}

上面代码中的

// 如果长度小于 16 不予处理:根据需要进行调整if (bytes.length < Constant.PROTOCOL_LENGTH_WITHOUT_CONTENT) {in.rewind();//注意这些地方因为有返回会导致return false;}

if (bytes[0] != Constant.PROTOCOL_HEAD|| bytes[bytes.length - 1] != Constant.PROTOCOL_FOOT|| bytes.length != dataLength) {in.rewind();return false;}

会出现客户端发送数据服务器无法正确解析的情况,这些需要注意。

这篇关于mina 客户端无法得到服务器的返回值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/840468

相关文章

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Python的pip在命令行无法使用问题的解决方法

《Python的pip在命令行无法使用问题的解决方法》PIP是通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载、更新等功能,安装诸如Pygame、Pymysql等Pyt... 目录前言一. pip是什么?二. 为什么无法使用?1. 当我们在命令行输入指令并回车时,一般主要是出现以

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.