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

相关文章

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

Python WSGI HTTP服务器Gunicorn使用详解

《PythonWSGIHTTP服务器Gunicorn使用详解》Gunicorn是Python的WSGI服务器,用于部署Flask/Django应用,性能高且稳定,支持多Worker类型与配置,可处... 目录一、什么是 Gunicorn?二、为什么需要Gunicorn?三、安装Gunicorn四、基本使用启

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S