Apache Mina Socket 与单片机通讯

2023-10-30

用以记录遇到的相关问题。(如需发送的是十六进制字符,需看另外一篇)
       一、Mina 介绍
              
ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序。它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。
       
       问题描述:
                  使用JAVA 做Socket Server服务,C Socket作为客户端。通讯时Server端接收不到数据 ,Server发送的数据客户端收到是乱码。
       问题分析:
             1:
字节序
                由于JAVA使用的
字节序是 big-endian格式而C语言的字节序在不同的地方使用的是不同的,C的字节序 X86上是little-endian, solaris上是big-endian;
            2: 字符编码
               C使用的编码默认是
用mbcs, 而java上是用unicode(并且和标准的unicode还有些区别,可以参考java文档)  
     解决方式:
            对接收的数据和发出的数据重新进行编码,改成字节的方式来进行转化。


    核心代码说明:
         
private static SocketSever SocketSever = null;// 声明一个Soket服务端服务
private SocketAcceptor acceptor = new NioSocketAcceptor();// 创建一个非阻塞式Socket适配器
private DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();// 创建一个过滤器

       
private SocketSever() {
chain.addLast("logger", new LoggingFilter());
chain.addLast("codec", new ProtocolCodecFilter(
new MessageCodecFactory()));// 添加自定义编码过滤器
// 设置读取数据的缓冲区大小
acceptor.getSessionConfig().setReadBufferSize(2048);
// 读写通道10秒内无操作进入空闲状态
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
acceptor.setHandler(new TcpServerHandler());// 设置业务处理层类
try {
acceptor.bind(new InetSocketAddress(bindPort));// 绑定端口
} catch (IOException e) {
e.getStackTrace();
}
}
           
    自定义编码和解码方法
      
/**
 * 
 * 解码类
 * 
 * **/
public class MessageDecoder extends CumulativeProtocolDecoder {
public boolean doDecode(IoSession session, IoBuffer in,
ProtocolDecoderOutput out) throws Exception {
byte[] b = new byte[in.limit()];
in.get(b);
String msg = new String(b);
Message message = new Message();
message.setContent(msg);
out.write(message);
return true;
}
}

public class MessageEncoder implements ProtocolEncoder {
private final static Charset charset = Charset.forName("UTF-8");
public void dispose(IoSession session) throws Exception {
}
public void encode(IoSession session, Object message,
ProtocolEncoderOutput out) throws Exception {
  //由于我这边发送数据的时候是使用的message对象,所有在转化的时候是转成对象然后对对象里面的内容进行重新编码。  
Message myMessage = (Message) message;
IoBuffer buff = IoBuffer.allocate(100).setAutoExpand(true);//设置自动拓容
buff.putString(myMessage.getContent(), charset.newEncoder());//设置默认的编码机
buff.putString(LineDelimiter.DEFAULT.getValue(), charset.newEncoder());//根据系统设定编码
buff.flip();
out.write(buff);
}
public byte[] toBytes(String msg) {
ByteBuffer buff = ByteBuffer.allocate(msg.getBytes().length);
buff.put(msg.getBytes());
return buff.array();
}
}//end    MessageEncoder  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Mina Socket 与单片机通讯 的相关文章

  • JDK8 网络Net包研究(一)

    网络基础 1 国际标准化组织的OSI 开放式系统互联模型 七层模型 2 TCP IP协议 组 四层模型 3 TCP IP协议组 一组包括TCP协议和IP协议 UDP协议 ICMP协议和其他一些协议的协议组 网络层 IP协议 gt 网络互连协
  • Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程

    设备控制软件编程涉及到的基本通信方式主要有TCP IP与串口 用到的数据通信协议有Fins与ModBus 更高级别的通信如 net中的Remoting与WCF在进行C S架构软件开发时会采用 本篇文章结合Fins ModBus协议的指令帧结
  • Alibaba Druid简单介绍及使用

    文章目录 概要 Druid 的主要特点和功能 Druid 的使用 一 添加依赖 二 配置数据源 三 配置 Druid 监控和过滤器 四 启动应用程序 五 访问监控页面 小结 概要 Alibaba Druid 以下简称 Druid 是阿里巴巴
  • c# 使用udp协议接收消息

    两个例子 例一 引用命名空间 using System Net using System Net Sockets 定义 private UdpClient Reveive IPAddress localIP IPAddress Parse
  • 计算机网络-----网络编程

    网络编程 实战 网络基础 1 什么是计算机网络 2 什么是网络编程 3 网络编程中的主要问题 4 网络通信要素 5 通信协议分层思想 IP和端口号 1 IP 1 1定义 1 2IP的分类 2 端口号 2 1定义 2 2端口号的分类 网络通信
  • 通过socket获取对方ip地址

    struct sockaddr in sa int len sizeof sa if getpeername sockfd struct sockaddr sa len printf 对方IP s inet ntoa sa sin addr
  • Python2.7网络通信socket和串口通信serial多线程同时实现

    Python2 7下多线程网络通信socket和串口通信serial同时进行 最近在写网络通信TCP IP读取数据和串口通信读取发送数据 之前写了单线程的然后这次尝试多线程实现 当然我是写的网络通信的服务端 话不多说贴上代码 coding
  • 在Vue下如何用js代码将13位的时间戳数据转换成正常显示的时间?

    问题描述 在使用Vue时 如果页面没有渲染完成 通过js代码是拿不到页面上数据的 而我们又想通过js操作数据时 就需要通过一些特别的方法 网上有各种方法 但是大部分都解释的比较模糊 这是我的一些小总结 由于不是专门玩前端的 但是又不想用vu
  • JavaSE复习:数组

    数组 Array 是多个相同类型数据按一定顺序排列 的集合 并使用一个名字命名 并通过编号的方式 对这些数据进行统一管理 数组的常见概念 数组名 下标 或索引 元素 数组的长度 1 数组本身是引用数据类型 而数组中的元素可以是任何数据类型
  • Unity3d之Socket UDP协议

    原文地址 http blog csdn net dingkun520wy article details 49201245 一 Socket 套接字 UDP协议的特点 1 是基于无连接的协议 没有生成连接的延迟所以速度比TCP快 2 支持一
  • /etc/init.d/mysql: No such file or directory 和 ERROR 2002 (HY000): Can't connect to local MySQL server through socket 解决办法

    更改 etc my cnf client password your password port 3306 socket tmp mysql sock Here follows entries for some specific progr
  • bootstrap使用之stickUp(固定导航栏)

    1 stickUp是jQuery下的一个导航栏插件 当界面较长时 导航栏会固定在顶部 不会移动 如下图 2 废话少说 下载http www bootcss com p stickup 在里面有示例文档 只是注意看index的时候js写在下面
  • java-使用newTaskFor封装任务中非标准取消

    1 使用newTaskFor钩子函数来改进用来封装非标准取消的方法 这是ThreadPoolExecutor的新特性 2 当提交一个callable给ExecutorService时 submit返回一个Future 可以用Future来取
  • Java中的NIO和IO的对比分析

    总的来说 java中的IO和NIO主要有三点区别 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 Selectors 1 面向流与面向缓冲 Java NIO和IO之间第一个最大的区别是 IO是面向流的 NIO是面向缓冲区的
  • Go_一文入门网络编程:常见协议、通信过程、Socket、CS/BS、TCP/UDP

    网络编程三要素 ip地址 端口 协议 在网络通信协议下 不同计算机上运行的程序 可以进行数据传输 IP地址 IP地址是一种在互联网协议中用于识别和定位设备的32位或128位数字地址 它是一个设备在网络上的唯一标识符 用于在互联网上定位和识别
  • SOFA Boot 整合SOFA RPC 、SOFA Registry

    参考资料 https www wenjiangs com doc dc7xvpxh https www sofastack tech projects sofa rpc getting started with rpc SOFA Stack
  • AF_INET和PF_INET的区别

    在写网络程序的时候 建立TCP socket一般是这样的 sock socket PF INET SOCK STREAM 0 然后在绑定本地地址或连接远程地址时需要初始化sockaddr in结构 其中指定address family时一般
  • socket连接超时问题

    一部分 把CSDN与中文yahoo翻了底朝天 也没找到如何设置socket的连接超时的满意方法 问此问题的兄弟已有一大堆 这里偶就讲一下win下如何设置socket的connect超时 设置connect的超时很简单 CSDN上也有人提到过
  • Socket编程中的强制关闭与优雅关闭及相关socket选项

    以下描述主要是针对windows平台下的TCP socket而言 首先需要区分一下关闭socket和关闭TCP连接的区别 关闭TCP连接是指TCP协议层的东西 就是两个TCP端之间交换了一些协议包 FIN RST等 具体的交换过程可以看TC
  • Java反射机制详解

    1 什么是反射 Java反射机制是在运行时 动态地获取类 的信息并操作类或对象的能力 通过反射 可以在运行时检查类的属性 方法和构造函数 访问和修改对象的属性值 调用对象的方法 以及创建对象的实例等 其本质上是通过JVM编译得到的class

随机推荐

  • 轻松穿戴 IMU嵌入宽松衣服里做动作捕捉

    在日常生活中 保持正确姿势能够有效促进血液循环并降低慢性疾病的患病风险 在康复环境中 姿势监测可以帮助医护人员评估病情和治疗手段的效果 从而改善患者的身体状况 在以往的研究中 往往要求IMU牢固固定在穿戴者的特定身体部位 对穿戴要求较高 操
  • codeblocks安装、使用、调试教程

    一 下载 官方下载地址 二 安装 运行codeblocks 20 03mingw setup exe或FossHUB 界面如下 点击 Next gt 点击 I Agree 如上图所示的选择组件界面 这时一定要勾选 MinGW Compile
  • Python实现某网站爬取小说(爬虫)

    该代码仅供学习交流 爬虫 爬虫是一种自动化程序 用于从互联网上获取和提取数据 它模拟人类用户的行为 在网页上浏览和抓取信息 并将所需数据保存或处理 下面演示的代码是爬取小说的 先看运行效果图 下载完成后 直接合并为一个文件 超方便好吧 不是
  • 无法访问GitHub,原因以及快速解决办法

    访问GitHub时 总是无法访问 例如出现如下情况 原因分析 一 首先 需要明确的是GitHub本身并没有封锁某些地区的访问 如果无法访问GitHub 很有可能是由于网络层面的问题 可能存在以下问题 DNS是一种用于将网址转换为IP地址的工
  • python 点击run 报错 @NotNull method

    问题 Error running test NotNull method com intellij execution configurations GeneralCommandLine getExePath must not return
  • 基于Qt的在线音乐播放器

    1 了解音乐播放器应该有哪些功能 音乐播放器的各种控制 上下曲 单曲循环 随机播放 顺序播放 歌曲列表 歌词显示 本地音乐保存 在线音乐搜索 在线音乐播放 2 制作Qt音乐播放器一定要了解QmediaPlayer和QmediaPlaylis
  • MongoDB怎么去除大量重复的数据

    本文虽然不是完全转载 但是思路及代码均是借鉴于 不会编程的小猿 博主的csdn博客 传送门如下 不会编程的小猿的博客 使用python爬虫采集数据通常会存放到MongoDB数据库中 那采集到的数据可能就会有大量的重复 那么有什么思路能够去重
  • 找出n个数里最小的k个

    找出n个数里最小的k个 链接 https www nowcoder com questionTerminal cc727473d1e248ccb674eb31bd8683dc 来源 牛客网 输入描述 每个测试输入包含空格分割的n 1个整数
  • 【ML on Kubernetes】第 5 章:数据工程

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • QT控件edit内容居中显示

    ui gt edit word gt setAlignment Qt AlignHCenter 设置edit文字居中显示
  • FPGA-(Win11)USB-Blaster无法在此设备上加载驱动解决

    在电脑上连接FPGA的USB Blaster下载器的时候 可能会出现无法在此设备上加载驱动问题 可以通过以下方式解决 首先这里如果驱动没有安装好 会有感叹号标志 可以在桌面底部搜索windows 安全中心 选择设备安全性 单击顶部的核心隔离
  • 关于Excel自定义TEXTJOIN函数、SWITCH函数

    目录 TEXTJOIN函数介绍 SWITCH函数介绍 自定义函数方法 源代码 TEXTJOIN函数 TEXTJOIN函数是Excel在2019版本推出的新函数 它能将某一区域的单元格值用某一符号拼接成一串文字 比如 有 好久不见 和 你还好
  • 大模型与人类的未来

    导读 6 月 10 日 智源大会 基于认知神经科学的大模型论坛 召开 本次论坛邀请到了认知神经 脑科学领域非常有建树的专家 深度讨论大模型的能力与局限性 包括对未来人工智能发展方向的讨论 论坛主席是清华大学脑与智能实验室首席研究员 智源首席
  • FW/IDS/IPS/WAF等安全设备部署方式及优缺点

    现在市场上的主流网络安全产品可以分为以下几个大类 1 基础防火墙FW NGFW类 主要是可实现基本包过滤策略的防火墙 这类是有硬件处理 软件处理等 其主要功能实现是限制对IP port的访问 基本上的实现都是默认情况下关闭所有的通过型访问
  • 流程编排及可视化

    写在前面 这里只介绍liteflow的简单基础使用以及作者对liteflow进行可视化扩展的相关阐述 一 背景及意义 背景 对于拥有复杂业务逻辑的系统承载着核心业务逻辑 这些核心业务逻辑涉及内部逻辑运算 缓存操作 持久化操作 外部资源调取
  • 单阶段实例分割综述

    前言 本文比较全面地介绍了实例分割在单阶段方法上的进展 根据基于局部掩码 基于全局掩码和按照位置分割这三个类别 分析了相关19篇论文的研究情况 并介绍了它们的优缺点 公众号CV技术指南原文文末附相关19篇论文的下载方式 关注公众号CV技术指
  • 图的深度优先搜索(dfs)

    图的遍历 即是对结点的访问 一个图有那么多个结点 如何遍历这些结点 需要特定策略 一般有两种访问策略 1 深度优先遍历 2 广度优先遍历 图的深度优先搜索 Depth First Search 指的是在搜索时 如果遇到一个结点既有子结点 又
  • c++中的基本类型

    专栏简介 为什么我要重新介绍c 的相关知识 在此之前 我对于c 的了解也仅仅是在表面 而在后来与c 慢慢的接触中 c 编程语言越来越让我觉得深奥 所以还是想要重新开创一个专栏来介绍c 对于c 的介绍 本专栏会先介绍98版的c 知识 之后会介
  • 关于cv2.cvtColor(im, cv2.COLOR_RGB2BGR)的一点细节

    注意里面的一个参数 cv2 COLOR RGB2BGR 这里只是表示一个通道的转换 例如 如果你用cv2读取了一幅图片 读进去的是BGR格式的 但是在保存图片时 要保存为RGB格式的 可以用cv2 COLOR RGB2BGR也可以用cv2
  • Apache Mina Socket 与单片机通讯

    用以记录遇到的相关问题 如需发送的是十六进制字符 需看另外一篇 一 Mina 介绍 ApacheMINA是一个网络应用程序框架 用来帮助用户简单地开发高性能和高可扩展性的网络应用程序 它提供了一个通过Java NIO在不同的传输例如TCP