jar包依赖:
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
另外还需要一个log4j.properties配置文件
server类:
IoAcceptor accepter = new NioSocketAcceptor();
ProtocolCodecFilter coderFilter = new ProtocolCodecFilter(
new TextLineCodecFactory(Charset. forName("UTF-8")));
/*
* 添加filter
* filter在DefaultIoFilterChainBuilder中是以list存储的
* private final List<Entry> entries;这里的Entry是DefaultFilterChain里
* 自定义的Entry: private class EntryImpl implements Entry{...}
* 可以调用addFirst,addLast,addAfter,addBefore方法进行添加filter,不同的方法
* 添加filter位置不同,执行的顺序不同,FilterChain按方法计算index将filter有序存储
* 所有添加的filter 要保证名字唯一
*/
accepter.getFilterChain().addLast("a", new LoggingFilter());
accepter.getFilterChain().addLast("b",coderFilter);
/*
* 设置消息处理类,必须,否则抛异常
* 继承IoHandlerAdapter类即可,重写messageReceived方法
* 对client消息进行处理
*/
accepter.setHandler(new MyServerHandler());
//设置session参数
accepter.getSessionConfig().setReadBufferSize(1024);
accepter.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
/*
* 绑定到某个socket端口,具体绑定是开启一个nio socket channel
* 启动调用顺序
* accepter的bind方法调用bindInternal方法,
* bindInternal调用startupAcceptor方法
* startupAcceptor方法中会启动一个线程对chanel进行select监听,
* org.apache.mina.core.polling.AbstractPollingIoAcceptor.Acceptor 线程监听类
*
* org.apache.mina.transport.socket.nio.NioSocketAcceptor
* .open(SocketAddress localAddress)方法源码
*
*protected ServerSocketChannel open(SocketAddress localAddress) throws Exception {
ServerSocketChannel channel = ServerSocketChannel.open();
boolean success = false;
try {
channel.configureBlocking(false);
ServerSocket socket = channel.socket();
socket.setReuseAddress(isReuseAddress());
socket.bind(localAddress, getBacklog());
channel.register(selector, SelectionKey.OP_ACCEPT);
success = true;
} finally {
if (!success) {
close(channel);
}
}
*/
accepter.bind(new InetSocketAddress(8484));
/*
* 启动后可telnet本机该端口进行测试
* >telnet 127.0.0.1 8484
* 连接后随便输入东西进行测试,信心怎么处理就看上面自定义的handler
*/
自定义handler重新messageReceived方法:
@Override
public void messageReceived( IoSession session, Object message ) throws Exception
{
String str = message.toString();
System.out.println(str);
if( str.trim().equalsIgnoreCase("quit") ) {
session.close(true);
return;
}
Date date = new Date();
session.write( date.toString() );
}
分享到:
相关推荐
src源码包下的test.mina.server.StartServer.java是启动服务器 test源码包下的socket.client.StartClient.java是启动客户端 日志记录在log目录下 lib下有完整的引用jar包 下载后记得评论和评分啊,可以返回资源分,...
使用apache-mina的搭建的一个客户端向server端发送对象,server接收对象并修改对象相关属性,再回传一个对象给客户端
里面包括了 一个mina作为服务器的例子已经各种学习文档和学习笔记,方便刚入门的学习,自己也是被坑了好久,才学会使用
Apache Mina Server 是一个网络通信应用框架,本项目是Mina开发的 服务端、客户端,例子,maven构建
根据HPSocketCS.TcpPackServer server = new HPSocketCS.TcpPackServer();的封包规则进行mina拆包,解决断包,粘包问题。亲测,30ms一次数据,无丢包现象,20MB,300人使用网络,
android 上的ftp服务器例子,通过ApacheFtpServer实现,依赖以下jar包: commons-...,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
配置文件例子: { " app_env " : " production " , " mina_endpoint " : " http://YOUR_NODE_IP:3085/graphql " , " archive_endpoint " : " http://YOUR_NODE_IP:3088 " , " server_addr " : " 127.0.0.1 " , " ...
android 上的ftp服务器例子,通过ApacheFtpServer实现,依赖以下jar包: commons-net-ftp-2.0.jar ftpserver-core-1.0.6.jar log4j-1.2.14.jar mina-core-2.0.4.jar slf4j-api-1.5.2.jar slf4j-log4j12-1.5.2.jar
Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...