关闭

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

标签: 通信
563人阅读 评论(0) 收藏 举报
分类:
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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2501次
    • 积分:77
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类
    文章存档
    最新评论