Mina 环境搭建
来源:互联网 发布:类似wiboxls的软件 编辑:程序博客网 时间:2024/06/05 16:42
Mina 环境搭建
最近在学习服务器,而对JAVA又比较熟悉的我就开始了学习服务器了。可能很多人会说还是用c++吧,不错现在很多大型游戏公司都是用C++的。这里我不得不说我的C++ 真的很一般了。所以这里先学java吧,其实语言也在学习的时候没必要太纠结了!废话太多了,开始入正题了。
本节目录
1 :有用网站
2 :准备资源
3 :环境搭建
4 :Demo测试
首先说一下为什么我这里要选择Mina ,1:Mina是开源的(我一般都会选择开源的框架的)
2:Apache 用了很多他的框架,一般来说还是很稳定的。 所以我选择了Mina 。横向比较现在用的比较多的还有netty ,XSocket 等等。
Mina 的作用: 它是封装了JavaNIO(如果对JavaNIO不了解的可以再网上找一些资料来看一下,如果这个都没弄明白的话后面就很难继续了,所以建议先打好基础)
的一个开源框架,更利于我们开发java 服务器。
1 :有用网站
. 官方网站http://mina.apache.org/
2 :准备资源
. 搭建Mina 环境必备的资源有 : mina-core-2.0.7.jar , slf4j-api.jar , log4j.jar , slf4j-simple.jar (分别去官网下载吧,版本号这里可能不同以最新的为准,如果实在不知道下载的可以私聊我给你)
3 :环境搭建
. java 环境
学习java 的都应该清楚的,JDK 下载 ; 环境变量配置 ; Eclipse 下载
. Mina 环境
以外部包的方式导入上面准备的4个资源(右键项目:build path / configuare build path / add external jars ) 导入后如下结构图,表明我们的环境搭建好了。
- Referenced Libraries
-mina-core-2.0.7.jar
- slf4j-api.jar
- log4j.jar
- slf4j-simple.jar
4 :Demo测试
Server 端
. 创建Server
- public class MinaServer
- {
- public static void main(String[] args)
- {
- //创建ServerScoket
- SocketAcceptor acceptor = new NioSocketAcceptor();
- //设置传输方式(这里设置成对象传输模式,还有很多的类型后面会具体讲到
- DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
- ProtocolCodecFilter filter = new ProtocolCodecFilter(
- new ObjectSerializationCodecFactory());
- chain.addLast("objectFilter", filter);
- // 添加消息处理
- acceptor.setHandler(new MinaServerHanlder());
- // 开启服务器
- int bindPort = 9988;
- try {
- acceptor.bind(new InetSocketAddress(bindPort));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
. 创建消息处理类
- <p>import org.apache.mina.core.service.IoHandlerAdapter;
- import org.apache.mina.core.session.IdleStatus;
- import org.apache.mina.core.session.IoSession;</p><p>public class MinaServerHanlder extends IoHandlerAdapter {
- private int count = 0;</p><p> // 由底层决定是否创建一个session
- public void sessionCreated(IoSession session) {
- System.out.println("新客户连接");
- }</p><p> // 创建了session 后会回调sessionOpened
- public void sessionOpened(IoSession session) throws Exception {
- count++;
- System.out.println("第 " + count + " 个 client 登陆!address: : "
- + session.getRemoteAddress());
- }</p><p> // 当收到了客户端发送的消息后会回调这个函数
- public void messageReceived(IoSession session, Object message)
- throws Exception {
- System.out.println("服务器收到客户端发送指令 :" + message);</p><p> }</p><p> // 发送成功后会回调的方法
- public void messageSent(IoSession session, Object message) {
- System.out.println("message send to client");
- }</p><p> // session 关闭调用
- public void sessionClosed(IoSession session) {
- System.out.println("one client disconnect");
- }</p><p> // session 空闲的时候调用
- public void sessionIdle(IoSession session, IdleStatus status) {
- System.out.println("connect idle");
- }</p><p> // 异常捕捉
- public void exceptionCaught(IoSession session, Throwable cause) {
- System.out.println("throws exception");
- }
- }</p>
Client 端
Client 端的创建方式和服务器类似的
创建客户端
- import java.net.InetSocketAddress;
- import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
- import org.apache.mina.core.future.ConnectFuture;
- import org.apache.mina.filter.codec.ProtocolCodecFilter;
- import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
- import org.apache.mina.transport.socket.nio.NioSocketConnector;
- public class MinaClient {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- // 创建Socket
- NioSocketConnector connector = new NioSocketConnector();
- //设置传输方式
- DefaultIoFilterChainBuilder chain = connector.getFilterChain();
- ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSerializationCodecFactory());
- chain.addLast("objectFilter", filter);
- //设置消息处理
- connector.setHandler(new MinaClientHanlder());
- //超时设置
- connector.setConnectTimeoutCheckInterval(30);
- //连接
- ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988));
- cf.awaitUninterruptibly();
- cf.getSession().getCloseFuture().awaitUninterruptibly();
- connector.dispose();
- }
- }
创建客户端消息处理
- <p>import org.apache.mina.core.service.IoHandlerAdapter;
- import org.apache.mina.core.session.IoSession;</p><p>
- public class MinaClientHanlder extends IoHandlerAdapter {
- public void sessionOpened(IoSession session) throws Exception {
- System.out.println("客户端登陆");
- session.write("hello world");
- }
- public void sessionClosed(IoSession session)
- {
- System.out.println("client close");
- }
- public void messageReceived(IoSession session , Object message)throws Exception
- {
- System.out.println("客户端接受到了消息") ;
- }
- }</p><strong>运行结果</strong>
server :
新客户连接
第 1 个 client 登陆!address: : /127.0.0.1:55497
服务器收到客户端发送指令 :hello world
client :
客户端登陆
后记 :本来想上传图片的,可惜CSDN 这个上传图片那叫一个慢啊。无奈了....如果有什么问题可以回复我。
原文:http://blog.csdn.net/pdw_jsp/article/details/8603224
- Mina 环境搭建
- Mina 环境搭建
- android+mina 开发环境搭建
- apache mina 学习笔记之一:mina简介和环境搭建
- 1.mina服务初体验-->.<简单的搭建个mina
- 使用Apache MINA框架搭建服务端
- MINA
- mina
- MINA
- mina
- mina
- MINA
- mina
- Mina
- 环境搭建
- 搭建环境
- 环境搭建
- 搭建环境
- java
- PHP_I love U之(1)php衣食父母:使用usort()函数为二维数组排序
- 验证最小化可行产品(MVP)的15种方法
- Qt非阻塞延时
- 安卓开发1
- Mina 环境搭建
- 1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题
- 汇编语言 学习笔记(updating...)
- cc150:setofstacks,栈就像叠盘子,有一定高度
- EvilCode的专栏╭☆╯ -- Android/Linux DRIVER
- C语言学习->getchar()和putchar()详细解释。
- Redis与Memcached的区别
- c++ if()括号中对象指针的含义
- uva--10400+dfs+回溯