IoService(Inf)
|
|==AbstractIoService --IoAcceptor -----IoConnector
| | | |
| |-----------|==AbstractIoAcceptor |==AbstractIoConnector
|
|==NioSocketAcceptor |==NioSocketConnector
|==NioDatagramAcceptor |==NiooDatagramConnector
|==VmPipeAcceptor |==VmPipeConnector
图例:
=== 表示: implements
---- 表示: extends
一个非常好的入门的例子:http://mina.apache.org/tutorial-on-protocolcodecfilter-for-mina-2x.html
out-of-box examples:
例题一、Reverser Text protocol based on a protocol codec Server
public class Main {
private static final int PORT = 8080; public static void main(String[] args) throws Exception { NioSocketAcceptor acceptor = new NioSocketAcceptor(); // Prepare the configuration acceptor.getFilterChain().addLast("logger", new LoggingFilter()); acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset .forName("UTF-8")))); // Bind acceptor.setHandler(new ReverseProtocolHandler()); acceptor.bind(new InetSocketAddress(PORT)); System.out.println("Listening on port " + PORT); } }
public class ReverseProtocolHandler extends IoHandlerAdapter { @Override public void exceptionCaught(IoSession session, Throwable cause) { // Close connection when unexpected exception is caught. session.close(); } @Override public void messageReceived(IoSession session, Object message) { // Reverse reveiced string String str = message.toString(); StringBuffer buf = new StringBuffer(str.length()); for (int i = str.length() - 1; i >= 0; i--) { buf.append(str.charAt(i)); } // and write it back. session.write(buf.toString()); } }
运行测试:(建议使用SocketTestv2.0.0作为客户端进行测试)
运行结果:
Listening on port 8080
12924 [NioProcessor-1] INFO org.apache.mina.filter.logging.LoggingFilter - CREATED
12924 [NioProcessor-1] INFO org.apache.mina.filter.logging.LoggingFilter - OPENED
42696 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - CREATED
42696 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - OPENED
42696 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - RECEIVED: HeapBuffer[pos=0 lim=298 cap=2048: 47 45 54 20 68 74 74 70 3A 2F 2F 77 77 77 2E 73...]
42727 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - SENT: HeapBuffer[pos=0 lim=146 cap=147: 30 2E 31 2F 50 54 54 48 20 30 30 46 30 35 32 39...]
42727 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
例题二、SumUp Server
需求:客户端不断发送AddMessage,服务端把这些AddMessage中传递过来的数据进行累加,并客户端每发一个AddMessage请求,服务端都把最后的累加和返回给客户端,服务端给客户端会送的报文格式是ResultMessage。由于两者都有个报文序号所以被抽象了一个公共基类。
AddMessage(seqnum,addValue);
ResultMessage(seqnum,retcode,sumValue)
另外,报文序列化方面我们同时支持两种,由用户进行配置,一种是采用java的对象流;另一种是用户自定义的codec.
public abstract class AbstractMessage implements Serializable {//以支持对象序列化 private int sequence;//报文序列号 public int getSequence() { return sequence; } public void setSequence(int sequence) { this.sequence = sequence; } }
public class AddMessage extends AbstractMessage { private static final long serialVersionUID = -940833727168119141L; private int value; public AddMessage() { } public int getValue() { return value; } public void setValue(int value) { this.value = value; } @Override public String toString() { // it is a good practice to create toString() method on message classes. return getSequence() + ":ADD(" + value + ')'; } }
public class ResultMessage extends AbstractMessage {
private static final long serialVersionUID = 7371210248110219946L; private boolean ok; private int value; public ResultMessage() { } public boolean isOk() { return ok; } public void setOk(boolean ok) { this.ok = ok; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } @Override public String toString() { if (ok) { return getSequence() + ":RESULT(" + value + ')'; } else { return getSequence() + ":RESULT(ERROR)"; } } }
用户自定义的codec上,我们可以采用:公共包头+不同包体的方式。
- 大小: 8.8 KB
- 描述: SocketTest作为客户端
- 大小: 19.8 KB
分享到:
相关推荐
NULL 博文链接:https://aniyo.iteye.com/blog/1609337
mina 长连接 客户端+服务端 实现长连接可以收发消息正确部署可以使用需要的朋友可以下载看看
Mina断包,粘包的处理。(完整实例,客户端,服务端)
mina server开发服务端/客户端代码,供大家一起共同分享学习。
MINA 服务端和客户端demo
Mina 服务端客户端示例程序
mina2服务端客户端实例,直接导入eclipse项目即可。
minafileserver(Socket客户端+Mina服务端传文件)
一个对推送 及时的处理结束,长连接保持,以及对客户端 和服务端的实现,
Apache Mina Server 是一个网络通信应用框架,本项目是Mina开发的 服务端、客户端,例子,maven构建
里面包含了mina服务端和客户端,我的测试用的是,运行demo里面的demo1server.java启动服务端的虚拟机,然后安装mina下的客户端到手机上就能实现通信。端口应该是对应好的。
NULL 博文链接:https://bjyzxxds.iteye.com/blog/1267685
6、在客户端输入服务IP地址和端口,然后点击“开启客户端”按钮。 如果一切正常为,那么你会看到使用Netty框架实现的网络通讯结果。然后你就可以仔细JavaFX代码和Netty的代码,很简单的呢。声明一下,本人使用Mina...
mina框架中socket使用,有服务端和客户端。这是比较完整的项目。希望能给后人点参考
本资源代码简略的实现了Mina服务端和相对应的Android客户端,实现的功能包括字符串传递,object传递等,另外,注意,自己使用的时候请自行修改IP
本代码包含mina服务端,同步客户端-即短连接方式,异步客户端-即长连接方式。
mina框架实现tcp长连接服务端所需要的jar包
java客户端socket与mina服务端通信,保持长连接
项目包含有mina的服务端与客户端,客户端发送心跳包,服务端响应心跳包