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

相关文章

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源