Mina的服务器
(一)
package testMina; import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset; import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaSimpleServer {
private static final int PORT = 9123;
private static final String HOST = "localhost"; public static void main(String[] args) {
// 接收者
IoAcceptor acceptor = new NioSocketAcceptor();
// 设置编码器
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
// 设置Handler
acceptor.setHandler(new TimeServerHandler());
// 心跳
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 6);
// 绑定端口,启动服务,并开始处理远程客户端请求
try {
acceptor.bind(new InetSocketAddress(HOST, PORT));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("服务端启动成功");
}
}
(二)
package testMina; import java.sql.Timestamp;
import java.util.Date; import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession; public class TimeServerHandler extends IoHandlerAdapter {
private int count = 0; // 由底层决定是否创建一个session
@Override
public void sessionCreated(IoSession session) {
System.out.println("新的连接");
} // 创建了session 后会回调sessionOpened
public void sessionOpened(IoSession session) throws Exception {
count++;
System.out.println("第 " + count + " 个 client 登陆!address: : " + session.getRemoteAddress());
} // 有异常时执行方法
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println("客户端断了!!!");
//cause.printStackTrace();
} //接收消息时调用
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
String str = message.toString();
System.out.println("接受到的数据是:" + message);
if (str.trim().equalsIgnoreCase("quit")) {
session.close();
return;
}
Date date = new Date();
// 向输出流中写东西
session.write(date.toString());
System.out.println("Message written...");
}
// session 关闭调用
@Override
public void sessionClosed(IoSession session) {
System.out.println("one client disconnect");
session.close(session.isConnected());
} // 当连接空闲时触发此方法.
@Override
public void sessionIdle(IoSession session, IdleStatus status) {
System.out.println("【时间】:"+new Timestamp(System.currentTimeMillis())+"连接空闲(心跳机制)");
} // 当信息已经传送给客户端后触发此方法.
@Override
public void messageSent(IoSession session, Object message) {
System.out.println("信息已经传送给客户端");
}
}
Mina的服务器的更多相关文章
- 【Andorid开发框架学习】之Mina开发之服务器开发
下午那篇博客我们讲到了Mina的客户端的开发,如果还有没看过的同学可以看一下,我是传送门.现在,我们来学习一下,Mina的服务器的开发. 一.首先看一下,我的服务器的代码图片: 服务器代码我是在My ...
- java socket 多线程通讯 使用mina作为服务端
客户端代码不变,参照 http://www.cnblogs.com/Westfalen/p/6251473.html 服务端代码如下: import java.io.IOException; impo ...
- 【Andorid开发框架学习】之Mina开发之客户端开发
昨天我们讲到了Mina的基本知识点.如果还有不懂得同学可以看一下我昨天的博客.http://www.cnblogs.com/getherBlog/p/3934927.html今天我着重来讲一下基于Mi ...
- 基于MINA框架快速开发网络应用程序
1.MINA框架简介 MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架.通过使用M ...
- spring+mybatis+mina+logback框架搭建
第一次接触spring,之前从来没有学过spring,所以算是赶鸭子上架,花了差不多一个星期来搭建,中间遇到各种各样的问题,一度觉得这个框架搭建非常麻烦,没有一点技术含量,纯粹就是配置,很低级!但随着 ...
- 【Andorid开发框架学习】之Mina开发之Mina简介
今天我将介绍 Apache MINA的基本概念和 API,包括 I/O服务.I/O 会话.I/O 过滤器和 I/O 处理器. 一.MINA的简介 Apache MINA是一个网络应用程序框架,用来帮助 ...
- Mina Basics 02-基础
基础 在第1章中,我们简要介绍了Apache MINA.在本章中,我们将了解客户端/服务器体系结构以及有关基于MINA的服务器和客户端的详细信息. 我们还将基于TCP和UDP公开一些非常简单的服务器和 ...
- Openfire源码阅读(一)
本篇先分析openfire源码的主要流程,模块细节后续再继续分析: 一.简介: Openfire是开源的实时协作服务器(RTC),它是基于公开协议XMPP(RFC-3920),并在此基础上实现了XMP ...
- 为什么一个还没毕业的大学生能够把 IO 讲的这么好?
Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 JDK1.4 之后出现的 NIO 技术,对比 N ...
随机推荐
- 20155336 2016-2017-2《JAVA程序设计》第六周学习总结
20155336 2016-2017-2<JAVA程序设计>第六周学习总结 教材学习内容总结 第十章 串流(Stream): 数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取 ...
- WPF MediaKit的一点问题
原版WPF MediaKit在捕获摄像头视频时,如果不使用640*480分分辨率输出,会出现NewVideoSample事件不被触发的问题. 经数日摸索,终于明白SetVideoCapturePara ...
- Selenium2+python自动化之读取Excel数据(xlrd)
前言 当登录的账号有多个的时候,我们一般用excel存放测试数据,本节课介绍,python读取excel方法,并保存为字典格式. 一.环境准备 1.先安装xlrd模块,打开cmd,输入pip inst ...
- js 面向对象 继承机制
根据w3cschool上的描述:共有3种继承方法(对象冒充,原型链,混合) 1.对象冒充:构造函数ClassA使用this关键字给所有属性和方法赋值,使ClassA构造函数成为ClassB的方法,调用 ...
- Alwayson--配置只读请求
场景:有三台服务器SQLNode131,SQLNode132 ,SQLNode133: 1) 三台服务器加入域DCDemo.com 2) 三台服务器使用端口访问数据库 3) 三台服务器构建故障转移群集 ...
- Openlayers地图量算功能
http://openlayers.org/en/latest/examples/measure.html?q=measure 按官网的例子来就行,新建对象时注意加上命名空间 var vect ...
- ASP.NET 实现多页面合并一页显示
目前业务有一个需求: 就是把多个网页合并到一个页面显示, 在实现过程中我一般使用两种方法: 利用母版页设置导航栏, 定位到每个网页; 利用用户控件( .acsx 后缀的文件), 但是有个问题就是传参比 ...
- sqlserver插入之字符串+数字
declare @i int,@a varchar(10)set @i = 0set @a='hiro--'+LTRIM(@i)while @i < 500begin insert into h ...
- 企业项目开发--分布式缓存memcached(3)
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3.3.ssmm0-data 结构: 3.3.1.pom.xml 1 <?xml version=& ...
- 【转】POJ分类很好很有层次感
OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一 ...