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

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;
}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值