- 浏览: 160132 次
最新评论
-
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 1014/** * 各地图API坐标系统比较与转换; * W ... -
Netty Websocket 例子
2015-01-08 14:36 1803Netty框架(Netty-3.5.7.Final)来实现W ... -
基于CXF的webService本地数据交互----PC端(四)
2013-04-26 17:20 1591不想新建项目了(可以参考前面一、二、三),就在现有的 ... -
LDAP简单的增删查改
2013-03-04 14:08 31041. 认证信息: package com.royal ... -
pushlet 推送框架简单使用Demo
2013-01-30 14:48 3225人懒了,有点不想写了,网上有好例子,帮忙宣传一下。 ... -
Java调用 SMS Cat发短信
2012-11-02 16:38 2275居然不能发表SMS Cat的中文名?! 这个是 SMS ... -
jersey demo
2012-08-28 16:33 2168同样是Maven构建的项目,不解释。 项目 ... -
验证码例子(jcaptcha插件的使用)
2012-07-20 11:45 2593和上一篇验证码的例子(kaptcha插件的使用)类 ... -
验证码例子(kaptcha插件的使用)
2012-07-19 17:35 2820使用kaptcha插件实现验证码小例子(顺便加了spri ... -
springMVC security Demo
2012-07-03 10:33 2469springMVC 结合权限控制。 项目目录结构 ... -
springMVC Demo
2012-06-07 16:32 1585项目目录结构图: 项目前需要用到的jar包 ... -
List 对象排序 Demo
2012-04-19 11:18 914List 对象排序 Demo 项目目录结构: ... -
restful webservice in springMVC Demo
2012-04-18 17:24 2995Maven restful webservice spring ... -
dom4j简单的XML文件遍历 demo
2012-04-10 15:48 1570随便找一个简单的xml文件,存放进自己的项目中 data.x ... -
基于CXF的webService本地数据交互----PC端与Android端(三)
2012-03-31 09:49 2430本篇基于(二)的基础上续写 主要是JSON的数据交 ... -
bitbucket免费在线库的简用
2012-03-22 10:46 4507bitbucket相当于SVN;版本库的管理,在线免费存储。一 ... -
Checkstyle代码检测插件简用
2012-03-16 13:17 14661.Checkstyle特点简介 a.自动化代码检测 ... -
基于CXF的webService本地数据交互----PC端与Android端(二)
2012-03-15 17:02 1491服务端以maven的形式创建项目。 项目创建好后 ... -
maven自定义本地库位置.m2/repository
2012-03-14 16:56 10285默认的maven本地库位置是:${user.home}/.m2 ... -
jrebel插件实现热部署
2012-03-09 11:59 5254一、eclipse中 jrebel 插件的安装: ...
相关推荐
本教程将深入探讨Mina框架的入门与开发,帮助你快速掌握这个框架的关键概念和技术。 首先,理解Mina的核心概念至关重要。Mina提供了一个事件驱动、异步通信模型,使得开发者可以更高效地处理网络I/O操作。它抽象出...
这就是一个基础的Mina入门实例,展示了如何使用Mina进行客户端-服务器间的通信。随着深入学习,你可以了解更多的Mina特性,如心跳机制、多线程处理、会话管理等,以构建更复杂、高效的网络应用。
`org.apache.mina`是Apache的另一个项目,提供了一个高性能、异步的网络通信框架,常用于构建网络服务器,例如TCP/IP和UDP通信,这对于处理Web服务请求和响应来说是非常关键的。 【标签】中的"axis2"、"webservice...
Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长连接VS短连接 8 二. Mina基础 9 1.IoService接口 10 2.1.1 类结构 11 2.1.2 应用 12 2.IoFilter...
**Mina2.0入门** Apache Mina是一个高度可扩展且功能强大的网络通信框架,它为Java应用程序提供了简单而统一的API来处理TCP/IP、UDP和SSL/TLS协议。Mina2.0作为其最新版本,引入了许多改进和优化,旨在提高性能、...
描述提到,这个源码是配合某篇技术文章《NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示》的实现部分,文章链接为http://www.52im.net/thread-373-1-1.html。通常,这样的源码示例会包含完整的服务器端代码...
标题中的“服务端基于MINA2的UDP双向通信Demo演示(Java客户端)”是指使用Apache MINA框架在Java中实现的UDP(用户数据报协议)的双向通信示例。MINA是一个高性能、异步的网络应用程序框架,常用于构建网络服务,如...
#### Mina 入门实践 **第一步:下载并配置 Jar 包** - **mina-core-2.0.0-M1.jar**:从 Apache Mina 官方网站下载最新版本的 Mina 核心库。 - **slf4j-api-1.5.2.jar** 及 **slf4j-log4j12-1.5.2.jar**:用于日志...
#### 三、Mina入门示例 ##### 第一步:下载并配置Jar包 1. **Mina核心库**:从Mina官网下载最新版本的mina-2.0.1.zip,包含必要的核心组件。 2. **日志库**:下载slf4j1.5.2.zip,解压后得到slf4j-api-1.5.2.jar与...