(一)

package client;

import java.net.InetSocketAddress;
import java.nio.charset.Charset; import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector; public class MinaSimpleClient { private static String HOSTNAME = "localhost"; private static int PORT = 9123; public static void main(String[] args) throws InterruptedException {
NioSocketConnector connector = new NioSocketConnector();
// 设置编码解码器
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
// 设置Handler
connector.setHandler(new ClientTimerHandler());
// 获取连接,该方法为异步执行
ConnectFuture future = connector.connect(new InetSocketAddress(HOSTNAME, PORT));
// 设置空闲时间
connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
// 等待连接建立
future.awaitUninterruptibly();
// 获取session
IoSession session = future.getSession();
// 等待session关闭
session.getCloseFuture().awaitUninterruptibly();
// 释放connector资源
// 实际开发中,不要频繁关闭connector,因为它是重量级资源,应该设计成单例或者连接池
connector.dispose(); }
}

(二)

package client;

import java.sql.Timestamp;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession; public class ClientTimerHandler extends IoHandlerAdapter {
// 当一个客户端连接到服务器之后
// 当打开一个连接时被触发。在目前的实现中,好像 sessionOpened 和 sessionCreated 没有太大区别,
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("连接到服务器");
} // 当消息创建时
@Override
public void sessionCreated(IoSession session) throws Exception {
// session 创建时调用
session.write("消息创建");
System.out.println("消息创建");
} // 消息到达时
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
// 异步接收消息
String str = message.toString();
System.out.println("接收服务端消息:" + str);
} // 异常时调用
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
// 出现异常
System.out.println("服务器端断了!");
cause.printStackTrace();
session.close(true);
} // 消息空闲时
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("[Time]:" + new Timestamp(System.currentTimeMillis()) + "连接空闲");
if (session != null) {
session.close();
System.out.println("空闲时间过后,session被关闭");
}
} // 当一个客户端关闭时
@Override
public void sessionClosed(IoSession session) {
System.out.println("I'm Client =" + session.getId() + " I closed!");
}
}

Mina的客户端的更多相关文章

  1. Mina入门级客户端程序实现telnet程序

    Mina入门级客户端程序实现telnet程序,其实mina的客户端和服务端很相似 1.编写客户端MinaClient.java和客户端处理类MyClientHandler.java2.MinaClie ...

  2. 【Andorid开发框架学习】之Mina开发之客户端开发

    昨天我们讲到了Mina的基本知识点.如果还有不懂得同学可以看一下我昨天的博客.http://www.cnblogs.com/getherBlog/p/3934927.html今天我着重来讲一下基于Mi ...

  3. Mina TCP服务端客户端 示例

    服务端代码: package com.xd.nms.example; import java.io.IOException; import java.net.InetSocketAddress; im ...

  4. mina学习

    长连接表示一旦建立了链接,就可以长时间的保持双方的通讯,例如: socket链接,推送平台. 短链接表示建立链接,完成数据的交换之后,就断开链接,例如: http链接. mina 框架是对socket ...

  5. 【Andorid开发框架学习】之Mina开发之服务器开发

    下午那篇博客我们讲到了Mina的客户端的开发,如果还有没看过的同学可以看一下,我是传送门.现在,我们来学习一下,Mina的服务器的开发. 一.首先看一下,我的服务器的代码图片:  服务器代码我是在My ...

  6. Mina的线程模型

    在Mina的NIO模式中有三种I/O工作线程(这三种线程模型只在NIOSocket中有效,在NIO数据包和虚拟管道中没有,也不需要配置): IoAcceptor/IoConnector线程 IoPro ...

  7. Apache Mina原理及典型例子分析

    Apache Mina ,一个高性能 Java 异步并发网络通讯框架.利用 Mina 可以高效地完成以下任务: TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JX ...

  8. MINA学习之体系介绍

    基于MINA应用程序结构图: 我们可以看出,MINA是应用程序(客户端或服务端)和底层基于TCP,UDP等通讯协议的网络层之间的粘合剂.而且各个模块之间是相互独立的,你只需要在MINA体 系基础上设计 ...

  9. mina 实例(转载)

    mina:http://mina.apache.org/ 原文:http://maosheng.iteye.com/blog/1891665 大并发量socket 通信框架MINA介绍 博客分类: J ...

随机推荐

  1. ArcGIS Desktop Python add-ins 插件类型

    Python可以在ArcGIS 桌面程序中创建如下的插件类型: 插件类型 描述 按钮(button) 是一个简单功能定制形式,可以在点击情况下执行一些业务逻辑.它会执行一个或一系列的动作.按钮可以放在 ...

  2. svn 创建tag

    1. 右键项目(源) 2. 选择复制到哪个路径(创建文件夹选项) 3. 选择哪个版本(源的) 4. 填写备注 5. 结束 使用:import  .合并等

  3. 小强 ROS 机器人教程

    首先请您自行依据线标提示将小强接线连接好,完整结构如下两图所示: 小强是属于Turtlebot机器人.它由底盘.主机.Kinect相机(通过USB连接主机)组成,没有显示屏.如果要通过显示器查看主机的 ...

  4. (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)    Memo ...

  5. 基于MATLAB的中值滤波算法实现

    在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广 ...

  6. Apache服务器的简单配置与安全策略

    在之前讲的关于weevely后门分析中,有说到利用Apache的配置文件.htaccess来隐藏php后门.关于.htaccess文件的用途,在此结合Apache服务器的具体配置作一详解,也算是自己的 ...

  7. 老刘 Yii2 源码学习笔记之 Action 类

    Action 的概述 InlineAction 就是内联动作,所谓的内联动作就是放到controller 里面的 actionXXX 这种 Action.customAction 就是独立动作,就是直 ...

  8. JAVA服务器与C#客户端的通信技术调研

    JAVA服务器与C#客户端的通信技术调研 研究背景及目的: ARPG项目的需求:需要将现有的服务器从C++的编写平台换为java语言.在对需求进行分析的过程中,发现几点需要研究实现的问题 java与c ...

  9. 【Win10】开发中的新特性及原有的变更

    声明:本文内容适用于 Visual Studio 2015 RC 及 Windows 10 10069 SDK 环境下,若以后有任何变更,请以新的特性为准. 一.Password 控件的小眼睛属性的变 ...

  10. Asp.Net 跨域,Asp.Net MVC 跨域,Session共享,CORS,Asp.Net CORS,Asp.Net MVC CORS,MVC CORS

    比如 http://www.test.com 和 http://m.test.com 一.简单粗暴的方法 Web.Config <system.web> <!--其他配置 省略……- ...