MINA客户端建立连接,收发消息

原创 2014年06月12日 17:58:11
public class LocalClient {
private static final Logger log = Logger.getLogger(LocalClient.class);

/**
* 当前Session与本地6001端口通信
*/
private static IoSession session = null;
/**
* 执行客户端消息
* @param ami 发送的消息AppMsgInfo类型 注明:发送的消息和接收的消息都是根据协议已封装好的xml
* @return 返回响应的消息ResponseVo类型
*/
public synchronized static ResponseVo executeCommand(MessageInfo ami) {
ResponseVo vo = null;
if (null == session || null==session.getRemoteAddress() || !session.isConnected()) {
// 实际应用中,这里可以生成一个线程来监听
// Create TCP/IP connector.
IoConnector connector = new NioSocketConnector();
//连接服务器动作,超时时间为3秒
connector.setConnectTimeoutMillis(3000L);
connector.getSessionConfig().setUseReadOperation(true);
// 创建接收数据的过滤器
DefaultIoFilterChainBuilder chain = connector.getFilterChain();

chain.addLast("codec", new ProtocolCodecFilter(new AppClientCodecFactory()));//设置通信协议
// 设定客户端的消息处理器:一个AppClientHandler对象
connector.setHandler(new AscJavaClientHandler());
// 连结到服务器:
try {
ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1",6001));
//等待连接创建完成
cf.awaitUninterruptibly();
//获取会话
session=cf.getSession();
//进行消息传输
WriteFuture writeFuture = session.write(ami);
writeFuture.awaitUninterruptibly();
//判断消息是否发送完成
if(writeFuture.isWritten()){
ReadFuture readFuture = session.read();
   //等待消息响应
   readFuture.awaitUninterruptibly();
   //是否响应成功
   if(readFuture.isRead()){
    //获取消息
   Object message  = readFuture.getMessage();
   //转成消息对象
   ami = (MessageInfo)message;
if(null!=ami){
//转成responsevo对象
vo = Vo2XmlUtil.xmlStr2ResonseVo(ami.getMsgIdentify(), ami.getMsgBody());
}else{
log.error("收到服务端[控制器-6001端口]发来的消息: 消息不合法或空消息!");
}
   }
}
} catch (Exception e) {
log.error("can't connect to local port [6001] server!"+e.toString());
}finally{
//等待连接关闭
if(null!=session){
session.getService().dispose();
}
//关闭客户端线程
if(null!=connector){
connector.dispose();
}
}
}
return vo;
}
}

相关文章推荐

[MINA2.0源码](四)客户端完成建立连接

服务端完成连接后,这里往下执行 if (selected > 0) { nHandles -= processConnections(selectedHand...
  • woorh
  • woorh
  • 2013年08月15日 10:34
  • 789

mina整合spring ,服务端反向发送消息到客户端 完整实例

之前的项目需要用到mina,实现的功能主要是:服务端主动发送消息到客户端,这个的服务端为外网的tomcat,客户端为内网的tomcat,由于无法知道内网tomcat 的地址,也就不能直接通过http的...

[MINA2.0源码](二)客户端发起连接请求——NioSocketConnector

NioSocketConnector负责客户端向服务端发起连接请求,会创建一个NioSocketSession,尤其负责读写操作。功能与服务端的NioSocketAcceptor相对应,他们都是IoS...
  • woorh
  • woorh
  • 2013年08月09日 16:05
  • 2375

基于Apache mina 的android 客户端tcp长连接实现

TCP-long-connection-based-on-Apache-mina基于Apache mina 的tcp长连接实现,可用于android客户端推送。项目将Apache的mina项目移植到了...

MINA源码分析---对客户端设置连接间隔时间的过滤器

如果这个IP此次发起连接距离上次发起连接的时间少于规定的时间,则关闭会话,否则建立会话,可以避免同一个远程主机在短时间内发起多个连接 下面是源代码,比较简单明了,不作解释了 厅 /* * Li...

Mina长连接框架实现Android客户端与服务器端通信

一、概述         Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供Java 对象的序列化...

Mina长连接框架实现Android客户端与服务器端通信

一、概述         Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MINA客户端建立连接,收发消息
举报原因:
原因补充:

(最多只允许输入30个字)