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

相关文章

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

Redis客户端工具之RedisInsight的下载方式

《Redis客户端工具之RedisInsight的下载方式》RedisInsight是Redis官方提供的图形化客户端工具,下载步骤包括访问Redis官网、选择RedisInsight、下载链接、注册... 目录Redis客户端工具RedisInsight的下载一、点击进入Redis官网二、点击RedisI