原文地址:Mina Transports(Apache Mina user guide Chapter6 Transport)

1.1.1.APR传输

1.1.1.1.介绍

APR (Apache Portable Runtime)Apache便携式运行时库提供卓越的可扩展性、性能和能够更好地与本地服务器技术集成。Mina支持APR传输。在这部分,我没们将在Mina的基础之上使用APR传输。我们将使用Time Server的例子。

1.1.1.2.先决条件

APR传输依赖以下组件

APR 程序包- 从http://www.apache.org/dist/tomcat/tomcat-connectors/native/下载/安装适当的平台jar包。JNI wrapper (tomcat-apr-5.5.23.jar)发布版本自带这个包。

将本地包加入到PATH路径下。

1.1.1.3.使用APR传输

参考Time Server完整示例程序。让我们来看出基于NIO的Time Server实现是什么样的:

1
2
3
4
5
6
7
8
9
IoAcceptor acceptor = new NioSocketAcceptor();
 
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
 
acceptor.setHandler(  new TimeServerHandler() );
 
acceptor.getSessionConfig().setReadBufferSize( 2048 );acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
 
acceptor.bind( new InetSocketAddress(PORT) );

让我们来看怎么使用APR传输:

1
2
3
4
5
6
7
8
9
IoAcceptor acceptor = new AprSocketAcceptor();
 
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
 
acceptor.setHandler(  new TimeServerHandler() );
 
acceptor.getSessionConfig().setReadBufferSize( 2048 );acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
 
acceptor.bind( new InetSocketAddress(PORT) );

我们只是将NioSocketAcceptor变为AprSocketAcceptor了。就是这样,现在我们的Time Server将会使用APR传输。

其他完整的流程仍然是相同的。

1.1.2.Serial传输

通过Mina2.0你可以连接到串行端口通过使用连接到Mina的TCP / IP端口。

1.1.2.1.了解Mina2.0

你可以下载最新的构建版本(目前最新的是2.0.13)。如果你喜欢从仓库构建代码,如需要帮助请查阅开发者指南。

1.1.2.2.先决条件

有用的信息:

在访问串行端口之前Java程序需要一个本地程序库(根据你的操作系统使用.DLL或.so文件)。Mina使用来自于ftp://ftp.qbang.org/pub/rxtx/rxtx-2.1-7-bins-r2.zip的RXTX.org包。

只需要将你完好的.DLL或.so文件放入你的JDK/JRE里面的jre/lib/i386/路径,或使用-Djava.library.path=定义你的本地程序包路径。

有用的信息:

mina-transport-serial.jar不包括在完整的分发包。你可以从这里下载。

1.1.2.3. 连接一个串行端口

串行通信Mina只提供一个IoConnector,由于其本身是点对点通信媒体。在这个时候,你应该已经读了Mina教程。现在连接到串行端口你需要SerialConnector:

1
2
3
// create your connector
 
IoConnector connector = new SerialConnector()connector.setHandler( ... here your buisness logic IoHandler ... );

没有什么与SocketConnector截然不同,让我们创建一个地址连接到串行端口:

1
SerialAddress portAddress=new SerialAddress( "/dev/ttyS0", 38400, 8, StopBits.BITS_1, Parity.NONE, FlowControl.NONE );

第一个参数是你的端口标识。Windows电脑的串口被称为“COM1”、“COM2”等……Linux和其他一些Unix被称为:“/ dev / ttyS0”、“/ dev / ttyS1”、“/ dev / ttyUSB0”。

其余的参数是根据设备的驱动和所谓的通信特点。

·the baud rate·the data bits·the parity·the flow control mecanism

一旦完成,将连接器连接到地址:

1
2
3
4
5
ConnectFuture future = connector.connect( portAddress );
 
future.await();
 
IoSession sessin = future.getSession();

看吧!其他的都是像往常一样,你可以插入过滤器和编解码器。为了学习更多关于RS232的请参看:http://en.wikipedia.org/wiki/RS232

Mina APR传输与串口传输讲解---zhengli的更多相关文章

  1. ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

    本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC ...

  2. SecureCRT连接开发板 串口传输、tftp传输

    1.串口传输 使用命令:rx  r是service, x是X-model模式 ①.rx 文件名 再按Enter键 ②.将需要传到板子上的文件 拖到SecureCRT里面,选择发送X-model选项 注 ...

  3. 如何使用 pyqt 读取串口传输的图像

    前言 这学期选修了嵌入式系统的课程,大作业选择的题目是人脸口罩检测.由于课程提供的开发板搭载的芯片是 STM32F103ZET6,跑不动神经网络,所以打算将 OV7725 拍摄到的图像通过串口传输给上 ...

  4. 了解PCI Express的Posted传输与Non-Posted传输

    0.写在前面 本文首发于公众号[两猿社],后续将在公众号内持续更新~ 其实算下来接触PCIe很久了,但是由于之前换工作,一直没有系统的学习和练手项目,现在新项目买了Synopsys的PCIe IP,总 ...

  5. USB interrupt传输和isochronous传输的区别

    一直没理解USB的iso传输和interrupt传输的区别. 后来仔细看了下USB2.0 SPEC后才明白. interrupt传输和iso传输,都是等时的传输,也就是某个时间间隔发送一次. 区别在于 ...

  6. 【计算机网络】-传输层-Internet传输协议-TCP

    [计算机网络]-传输层-Internet传输协议-TCP TCP介绍 在不可靠的互联网上提供一个可靠的端到端字节流 面向连接的.可靠的.端到端的.基于字节流的传输协议 TCP位置 TCP服务模型 应用 ...

  7. 串口传输文件 lrzsz

    假设有一种开发环境,一块板子,除了串口,没有任何外部出入输出设备,没有sd卡,没有网线,这个时候如果你想跟这块板子传输交互文件,要怎么办? 根据modem所采用的文件传输协议:xmodem,ymode ...

  8. 使用sz/rz基于串口传输文件

    关键词:lrzsz.minicom.ZMODEM.MD5sum等. 在环境受限的嵌入式系统上,往往只有串口可以使用. 此时如果需要传输文件,需要借助rz/sz工具,可以使用的传输协议有ZMODEM.Y ...

  9. STM32 Bootloader基于ymodem传输协议串口IAP升级详解

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 1 预备知识 2 Bootloader 2.1 启动流程 2.2 校验跳转地址是否有效 ...

随机推荐

  1. <转>xshell的快捷键

    xshell中现有的快捷键 快捷方式键 说明 Alt + N 与文件菜单的新建相同 Alt + O 与文件菜单的打开相同 Alt + C 与文件菜单的断开相同 Alt + Enter 切换到全屏模式 ...

  2. 【bzoj1040】骑士[ZJOI2008](树形dp)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1040 这道题,很明显根据仇恨关系构造出的图形是一堆环套树.如果是普通的树,就可以马上裸树 ...

  3. spring boot 使用thymeleaf3.0以及thymeleaf的热部署

    spring boot 截止1.5.4,默认使用thymeleaf2.0,会有一些很蛋疼的地方比如xml格式之类的,具体哪些就不说了 -> 替换为3.0版本 pom中加入 <propert ...

  4. mongodb的使用(入门)

    1.登录mongodb ./bin/mongo 2.查看所有数据库 show dbs  ##默认有admin  和  local两个库 3.创建数据库 use test #创建数据库后,如果不写入数据 ...

  5. EntityFramework 学习 一 Validate Entity

    可以为实体实现自定义验证,重写DBContext中的个ValidateEntity方法 protected override System.Data.Entity.Validation.DbEntit ...

  6. nodejs 语法很特别的地方

    1. 不过我们之前说过了有 this 和没 this 的时候作用域不同,那个参数只是作用于构造函数中,而加了 this 的那个则是成员变量.用一个 this 就马上区分开来他们了,所以即使同名也没关系 ...

  7. Qt QFileSystemModel QDirModel 示例代码, 使用方法

    1.  QFileSystemModel 查看,添加 和 删除目录 2. 实现代码 dialog.h #ifndef DIALOG_H #define DIALOG_H #include <QD ...

  8. dataframe to sql

    使用pandas的to_sql时,还涉及到一些sql数据库的操作 在网上找到一段代码,很方便使用.来源:blog.csdn.net/qcyfred/article/details/78085243?l ...

  9. python常见的PEP8规范

    1. 括号中使用垂直隐式缩进或使用悬挂缩进 缩进 每级缩进用4个空格 示例: (垂直隐式缩进)对准左括号 def function_name(var_one,var_two, var_three,va ...

  10. JS实现百叶窗效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...