- 浏览: 156827 次
最新评论
-
bihongliang:
并且服务端一直报错:javax.bluetooth.Bluet ...
android 和 PC端 进行蓝牙通信 demo -
bihongliang:
你好,博主,我是windows10 64 位系统,加载了 64 ...
android 和 PC端 进行蓝牙通信 demo -
白云飘飘2016:
fcylf 写道win7 64位,pc端测试,报错:Nativ ...
android 和 PC端 进行蓝牙通信 demo -
fcylf:
win7 64位,pc端测试,报错:Native Librar ...
android 和 PC端 进行蓝牙通信 demo -
abc天残:
http://www.iteye.com/images/smi ...
android 从服务器下载更新新版本软件 demo
什么是Mina,用Mina可以干什么?
看不懂英文?那就随便百度,大概了解一下。
最终效果:
项目目录结构:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.royal</groupId> <artifactId>minaDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>minaDemo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- mina需要用到的包 --> <dependency> <groupId>org.apache.mina</groupId> <artifactId>mina-core</artifactId> <version>2.0.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.6.1</version> </dependency> </dependencies> </project>
User.java
package com.royal.model; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public User() { } public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Mina服务端编写:
MinaServer.java
package com.royal.service; import java.io.IOException; import java.net.InetSocketAddress; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; /** * mina服务端 * @author Royal * */ public class MinaServer { public static void main(String[] args) throws IOException { // 创建一个非阻塞的Server端 Socket,用NIO IoAcceptor acceptor = new NioSocketAcceptor(); // 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); // 设定这个过滤器将以对象为单位读取数 ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSerializationCodecFactory()); chain.addLast("objectFilter", filter); // 设定服务器端的消息处理器:一个ObjectMinaServerHandler对象, acceptor.setHandler(new ObjectMinaServerHandler()); // 服务器端绑定的端口 int bindPort = 9988; // 绑定端口,启动服务器 acceptor.bind(new InetSocketAddress(bindPort)); System.out.println("Mina Server is Listing on:= " + bindPort); } }
ObjectMinaServerHandler.java
package com.royal.service; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import com.royal.model.User; /** * 对象服务接受处理类 * * @author Royal * */ public class ObjectMinaServerHandler extends IoHandlerAdapter { // 记录接受数据的次数 private int count = 0; /** * 当客户端 发送 的消息到达时 */ @Override public void messageReceived(IoSession session, Object message) throws Exception { // 我们己设定了服务器解析消息的规则一个User对象为单位传输: User u = (User) message; System.out.println("这里是服务器(" + session.getLocalAddress() + ")\t收到客户机(" + session.getRemoteAddress() + ")发来的用户对象:" + u.toString() + "---------" + count); count++; if (count == 1000) { count = 0; // 服务器主动断开与客户端的连接 session.close(true); } // 发送到客户端 session.write(u); } /** * 当一个客户端连接进入时 */ @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("incomming client: " + session.getRemoteAddress()); } /** * 当一个客户端关闭时 */ @Override public void sessionClosed(IoSession session) throws Exception { System.out.println(session.getRemoteAddress() + " client Disconnect!"); } /** * 当捕获到异常的时候 */ @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { System.err.println("error!!!!!!!!!!!!!"); super.exceptionCaught(session, cause); } }
Mina客户端测试编写:
MinaClient.java
package com.royal.client; import java.net.InetSocketAddress; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoConnector; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketConnector; /** * mina测试客户端 * @author Royal * */ public class MinaClient { public static void main(String[] args) { // Create TCP/IP connector. IoConnector connector = new NioSocketConnector(); // 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = connector.getFilterChain(); // 设定这个过滤器将以对象为单位读取数 ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSerializationCodecFactory()); chain.addLast("objectFilter", filter); // 设定客户端的消息处理器:一个ObjectMinaClientHandler对象, connector.setHandler(new ObjectMinaClientHandler()); // 连结到服务器: ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988)); // 等待连接创建完成 cf.awaitUninterruptibly(); // 等待连接断开 cf.getSession().getCloseFuture().awaitUninterruptibly(); // 客户端断开链接,释放资源 connector.dispose(); } }
ObjectMinaClientHandler.java
package com.royal.client; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import com.royal.model.User; /** * 对象客户端接受处理类 * * @author Royal * */ public class ObjectMinaClientHandler extends IoHandlerAdapter { // 当一个服务端连结进入时 @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("connect server : " + session.getRemoteAddress()); session.write(new User("mina", 18)); } // 当一个服务端关闭时 @Override public void sessionClosed(IoSession session) { System.out.println(session.getRemoteAddress() + " server Disconnect !"); } // 当服务器发送的消息到达时: @Override public void messageReceived(IoSession session, Object message) throws Exception { User u = (User) message; System.out.println("这里是客户端(" + session.getLocalAddress() + ")\t服务器(" + session.getRemoteAddress() + ")发来的消息: " + u.getName() + "\t" + u.getAge()); // 发送到服务端 session.write(u); } }
OK,就这样。
首先运行服务端MinaServer:
接着运行客户端MinaClient:
- ApacheMina入门(完成版).pdf (207.6 KB)
- 下载次数: 527
- minaDemo.rar (13.7 KB)
- 下载次数: 353
评论
4 楼
sanzhixiong86
2013-11-21
能问下我下的是2.7为什么不能正常运行
3 楼
redhacker
2013-08-28
楼主教程写的不错,谢谢!
2 楼
f429800584
2013-02-23
我还没有安装maven 不过非常感谢分享!
1 楼
aone
2013-01-30
运行正常,第一次运行mina demo,感谢
发表评论
-
各地图API坐标系统比较与转换
2015-08-07 15:34 958/** * 各地图API坐标系统比较与转换; * W ... -
Netty Websocket 例子
2015-01-08 14:36 1760Netty框架(Netty-3.5.7.Final)来实现W ... -
基于CXF的webService本地数据交互----PC端(四)
2013-04-26 17:20 1539不想新建项目了(可以参考前面一、二、三),就在现有的 ... -
LDAP简单的增删查改
2013-03-04 14:08 30601. 认证信息: package com.royal ... -
pushlet 推送框架简单使用Demo
2013-01-30 14:48 3152人懒了,有点不想写了,网上有好例子,帮忙宣传一下。 ... -
Java调用 SMS Cat发短信
2012-11-02 16:38 2220居然不能发表SMS Cat的中文名?! 这个是 SMS ... -
jersey demo
2012-08-28 16:33 2090同样是Maven构建的项目,不解释。 项目 ... -
验证码例子(jcaptcha插件的使用)
2012-07-20 11:45 2511和上一篇验证码的例子(kaptcha插件的使用)类 ... -
验证码例子(kaptcha插件的使用)
2012-07-19 17:35 2784使用kaptcha插件实现验证码小例子(顺便加了spri ... -
springMVC security Demo
2012-07-03 10:33 2430springMVC 结合权限控制。 项目目录结构 ... -
springMVC Demo
2012-06-07 16:32 1551项目目录结构图: 项目前需要用到的jar包 ... -
List 对象排序 Demo
2012-04-19 11:18 879List 对象排序 Demo 项目目录结构: ... -
restful webservice in springMVC Demo
2012-04-18 17:24 2942Maven restful webservice spring ... -
dom4j简单的XML文件遍历 demo
2012-04-10 15:48 1516随便找一个简单的xml文件,存放进自己的项目中 data.x ... -
基于CXF的webService本地数据交互----PC端与Android端(三)
2012-03-31 09:49 2371本篇基于(二)的基础上续写 主要是JSON的数据交 ... -
bitbucket免费在线库的简用
2012-03-22 10:46 4458bitbucket相当于SVN;版本库的管理,在线免费存储。一 ... -
Checkstyle代码检测插件简用
2012-03-16 13:17 14351.Checkstyle特点简介 a.自动化代码检测 ... -
基于CXF的webService本地数据交互----PC端与Android端(二)
2012-03-15 17:02 1442服务端以maven的形式创建项目。 项目创建好后 ... -
maven自定义本地库位置.m2/repository
2012-03-14 16:56 10218默认的maven本地库位置是:${user.home}/.m2 ... -
jrebel插件实现热部署
2012-03-09 11:59 5211一、eclipse中 jrebel 插件的安装: ...
相关推荐
ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门
这个是我学的apache mina2.0学习笔记的实例
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
这个网上一个牛人写的mina入门知识, 里面有基础介绍和项目开发步骤。 入门还是不错的,写的挺详细。 我把项目也加进来了。
本工程用于研究Apache Mina技术 本工程编码方式:UTF-8 本工程开发工具:MyEclipse 本工程运行步骤: 1、运行StartMinaServer类 2、运行StartMinaClient类
深入理解Apache_Mina_(1)----_Mina的几个类 深入理解Apache_Mina_(2)----_与IoFilter相关的几个类 深入理解Apache_Mina_(3)----_与IoHandler相关的几个类 深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和...
apache mina的入门完整学习资料,附加中文参考手册。
该文档较好的介绍了,apache mina框架的使用方法。
Apache MINA 线程模型配置 Mina配置
收集整理的Apache Mina chm pdf教程和帮助文档
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...
Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序。 apache-mina-2.0.7-bin.zip,apache-mina-2.0.7-src.zip,log4j-1.2.17.zip,slf4j-api-1.6.6.jar,slf4j-api-1.6.6-...
Apache Mina入门 Mina能干什么?先拉出来溜一下:我们用它做两个小程序,一个为服务器,收到客户机的消息 后,就回送给客户机;一个是简单的客户机,一连上服务器,就发一条消息报到,然后将从服务 器接到的消息再...
apache mina 简单示例apache mina 简单示例apache mina 简单示例apache mina 简单示例apache mina 简单示例apache mina 简单示例
Apache MINA2实用手册 Apache MINA2实用手册
Apache_MINA_快速入门,开发中用到,自己想学的,可以看看。
apache mina实例免费下载,有很多实例代码简单易懂欢迎大家下载!