Mina的客户端
(一)
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的客户端的更多相关文章
- Mina入门级客户端程序实现telnet程序
Mina入门级客户端程序实现telnet程序,其实mina的客户端和服务端很相似 1.编写客户端MinaClient.java和客户端处理类MyClientHandler.java2.MinaClie ...
- 【Andorid开发框架学习】之Mina开发之客户端开发
昨天我们讲到了Mina的基本知识点.如果还有不懂得同学可以看一下我昨天的博客.http://www.cnblogs.com/getherBlog/p/3934927.html今天我着重来讲一下基于Mi ...
- Mina TCP服务端客户端 示例
服务端代码: package com.xd.nms.example; import java.io.IOException; import java.net.InetSocketAddress; im ...
- mina学习
长连接表示一旦建立了链接,就可以长时间的保持双方的通讯,例如: socket链接,推送平台. 短链接表示建立链接,完成数据的交换之后,就断开链接,例如: http链接. mina 框架是对socket ...
- 【Andorid开发框架学习】之Mina开发之服务器开发
下午那篇博客我们讲到了Mina的客户端的开发,如果还有没看过的同学可以看一下,我是传送门.现在,我们来学习一下,Mina的服务器的开发. 一.首先看一下,我的服务器的代码图片: 服务器代码我是在My ...
- Mina的线程模型
在Mina的NIO模式中有三种I/O工作线程(这三种线程模型只在NIOSocket中有效,在NIO数据包和虚拟管道中没有,也不需要配置): IoAcceptor/IoConnector线程 IoPro ...
- Apache Mina原理及典型例子分析
Apache Mina ,一个高性能 Java 异步并发网络通讯框架.利用 Mina 可以高效地完成以下任务: TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JX ...
- MINA学习之体系介绍
基于MINA应用程序结构图: 我们可以看出,MINA是应用程序(客户端或服务端)和底层基于TCP,UDP等通讯协议的网络层之间的粘合剂.而且各个模块之间是相互独立的,你只需要在MINA体 系基础上设计 ...
- mina 实例(转载)
mina:http://mina.apache.org/ 原文:http://maosheng.iteye.com/blog/1891665 大并发量socket 通信框架MINA介绍 博客分类: J ...
随机推荐
- 常见XML解析器
xpp3 官网 http://www.extreme.indiana.edu/xgws/xsoap/xpp/ 简介 Xml Pull Parser (in short XPP) is a stream ...
- 高博-《视觉SLAM十四讲》
0 讲座 (1)SLAM定义 对比雷达传感器和视觉传感器的优缺点(主要介绍视觉SLAM) 单目:不知道尺度信息 双目:知道尺度信息,但测量范围根据预定的基线相关 RGBD:知道深度信息,但是深度信息对 ...
- onclick传参
var tema="<a title='打开' href='javascript:;' onclick='showKnowledgeMap(1,\" "+kl_na ...
- maven 学习:为什么要使用maven,maven使用过程中的一些参数
Maven是一个基于Java平台的项目构建工具. 设计的出发点: 在进行软件开发的过程中,无论什么项目,采用何种技术,使用何种编程语言,我们要重复相同的开发步骤:编码,编译,测试,生成文档,打包发布. ...
- jquery添加select option两种代码思路比较
功能需求:在客户选择了check_in_date和check_out_date之后,将在check_in_date至check_out_date的promotions中自动添加符合条件的promoti ...
- asp.net mvc 在JS中跳转到其它controller/action
平时在ASP.NET 中经常这样写, $('#loginOut').click(function() { $.messager.confirm('系统提示', '您确定要退出本次登 ...
- Replication--对发布修改的一些小总结
--==================================================== --在华丽分割线下,是我对肖磊--大菠萝的崇高地敬意和婶婶地感谢,本文乃肖兄表述我执笔而来 ...
- Ubuntu安装Apache+PHP
1.Ubuntu 安装Apache 安装Apache sudo apt-get install apache2 修改端口号 打开 etc/apache2/port.config 修改 port 80 ...
- iis 中https修改主机名方法
来源地址: https://www.pianyissl.com/support/page/29
- 『原创』手把手教你搭建一个实用的油耗App(一)
前言: 入行快10年,有点积蓄,三年前买了代步车.于是乎,汽车油耗开销就成了每个月都必须关注的问题.三年来,用过了无数油耗记录软件,比如最知名的“小熊油耗”,从第一次用,一直到最新一版,感觉越来越“臃 ...