Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便
apache mina
利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。
需要导入的包:
log4j.jar
mina-core-2.0.4.jar
slf4j-api-1.6.3.jar
slf4j-log4j12-1.6.3.jar
服务端代码:
/**
* @author aniyo
* blog: http://aniyo.iteye.com
*/
public class MinaTimeServer {
// 服务器监听端口
private static final int PORT = 8888;
/**
*
*/
public MinaTimeServer() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// 服务器端的主要对象
IoAcceptor acceptor = new NioSocketAcceptor();
// 设置Filter链
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
// 协议解析,采用mina现成的UTF-8字符串处理方式
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
// 设置消息处理类(创建、关闭Session,可读可写等等,继承自接口IoHandler)
acceptor.setHandler(new TimeServerHandler() );
// 设置接收缓存区大小
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
try {
// 服务器开始监听
acceptor.bind( new InetSocketAddress(PORT) );
}catch(Exception e){
e.printStackTrace();
}
}
}
服务端业务处理类:
package aniyo.mina.server;
import java.util.Date;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
/**
* @author aniyo
* blog: http://aniyo.iteye.com
* 继承自IoHandlerAdapter,IoHandlerAdapter继承接口 IoHandler
类IoHandlerAdapter实现了IoHandler的所有方法,只要重载关心的几个方法就可以了
*/
public class TimeServerHandler extends IoHandlerAdapter {
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
cause.printStackTrace();
}
/*
* 这个方法是目前这个类里最主要的,
* 当接收到消息,只要不是quit,就把服务器当前的时间返回给客户端
* 如果是quit,则关闭客户端连接*/
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String str = message.toString();
if (str.trim().equalsIgnoreCase("quit")) {
session.close();
return;
}
Date date = new Date();
System.out.println("hello"+str+session.getRemoteAddress()+date.toString());
session.write("i am recived");
System.out.println("Message written...");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionClosed(session);
System.out.println("客户端与服务端断开连接.....");
}
}
客户端:
package aniyo.mina.server;
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.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
/**
* mina客户端
* @author aniyo
* blog:http://aniyo.iteye.com
*/
public class MinaClient {
public static void main(String []args)throws Exception{
//Create TCP/IP connection
NioSocketConnector connector = new NioSocketConnector();
//创建接受数据的过滤器
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
//设定这个过滤器将一行一行(/r/n)的读取数据
chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
//客户端的消息处理器:一个SamplMinaServerHander对象
connector.setHandler(new MinaClientHandler());
//set connect timeout
connector.setConnectTimeout(30);
//连接到服务器:
ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",8888));
//Wait for the connection attempt to be finished.
cf.awaitUninterruptibly();
cf.getSession().getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
}
客户端业务逻辑处理类:
package aniyo.mina.server;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
/**
* 客户端业务处理逻辑
*
* @author aniyo blog: http://aniyo.iteye.com
*/
public class MinaClientHandler extends IoHandlerAdapter {
// 当客户端连接进入时
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("incomming 客户端: " + session.getRemoteAddress());
session.write("i am coming");
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
System.out.println("客户端发送信息异常....");
}
// 当客户端发送消息到达时
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
System.out.println("服务器返回的数据:" + message.toString());
}
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("客户端与服务端断开连接.....");
}
@Override
public void sessionCreated(IoSession session) throws Exception {
// TODO Auto-generated method stub
System.out
.println("one Client Connection" + session.getRemoteAddress());
session.write("我来了······");
}
}
先启动服务器,再启动客户端,就ok了
不写客户端也可用
在运行里输入cmd-->telnet localhost 8888 就可以了
分享到:
相关推荐
Apache Mina Server 是一个网络通信应用框架,本项目是Mina开发的 服务端、客户端,例子,maven构建
这是一个有关Mina在Java通信...这个实例中有客户端和服务端,与软件TCPUDPDbg进行文字通话测试。用的时候注意添加Mina包,此实例中用到的是mina-core-2.0.4包。 新手可以跟我一样从此实例入手,你会得到意外的收获滴。
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个... 客户端/服务端框架(典型的C/S架构) 网络套接字(networking socket)类库 事件驱动的异步API(注意:在JDK7中也新增了异步API)
实现了mina 的简单通信通信,内部配置了累积协议编解码器、工具类和客户端与服务端的端口配置。能够实现基本功能,下载完成需要四个基本jar包才能实现功能。我的博客上有相应资源支持下载。
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...