IoHandler是对数据的最终处理,它会得到数据的信息和状态,尽管处理是在IoHandler里面,但是真正执行通讯的是IoSession,它如同一个载体。
private IoHandler handler = new IoHandler() {
/**
* session create
*/
public void sessionCreated(IoSession session) throws Exception {
SocketAddress socketAddress = session.getRemoteAddress();
String address = socketAddress2Str(socketAddress);
// 2.如果地址是127.0.0.1,则转换为真实IP地址
String ip = address.substring(0, address.indexOf(":"));
String port = address.substring(address.indexOf(":") + 1);
if (ip.equals("127.0.0.1")) {
String localAddress = getLocalAddress();
address = localAddress.substring(0, localAddress.indexOf(":")) + ":" + port;
}
// 保存到session attribute
session.setAttribute(ADDRESS, address);
// 保存session
sessionMap.put(address, session);
sessionCreateTime.put(session, System.currentTimeMillis());
}
/**
* session opened
*/
public void sessionOpened(IoSession session) throws Exception {
// do nothing
}
/**
* session closed
*/
public void sessionClosed(IoSession session) throws Exception {
// 移除session
String address = (String) session.getAttribute(ADDRESS);
if (address != null) {
sessionMap.remove(address);
sessionCreateTime.remove(session);
if (logger.isDebugEnabled()) {
logger.debug("当前连接的连接数为:" + sessionMap.size());
}
}
}
/**
* session idle
*/
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
// 空隙时间大于设置的自动断开时间,断开连接
long idleTime = System.currentTimeMillis() - session.getLastReadTime();
if (idleTime > autoDisconnectTimeout) {
session.close(false);
return;
}
}
/**
* exception caught
*/
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
// 获取远端地址
String address = (String) session.getAttribute(ADDRESS);
// 关闭session
session.close(false);
// 通知异常监听器
Exception exception = new Exception("连接异常[" + address + "]", cause);
// 调用异常listener
exceptionListener.onException(address, exception);
}
/**
* message received
*/
public void messageReceived(IoSession session, Object message) throws Exception {
byte[] msg = (byte[]) message;
// 回应心跳消息
if (msg.length == 1 && msg[0] == HEART_REQUEST_MARK) {
session.write(new byte[] { HEART_RESPONSE_MARK });
return;
}
// 获取session保存的地址
String address = (String) session.getAttribute(ADDRESS);
// 调用accept listener
acceptListener.handleMessage(address, msg);
}
/**
* message sent
*/
public void messageSent(IoSession session, Object message) throws Exception {
// do nothing
}
};
分享到:
相关推荐
NULL 博文链接:https://chinaestone.iteye.com/blog/424576
最初的的时候采用indy控件,IdHTTP和IdSSLIOHandlerSocketOpenSSL配合,但是没有成功,对方服务器连接后立即断开链接,不返回任何数据,后来通过网上查询,找到了这个方法,可以根据服务器的要求自定义头文件和post...
nSocket是基于java NIO.1和NIO.2开发的轻量级网络通信框架,该框架为用户提供异步非阻塞的网络编程接口。... 3、IoHandler 4、A Simple Polling 中文详情可见:nSocket设计概要 标签:nSocket
用Delphi2010编码实现。在开发中遇到了几个问题,现写出来供需要的朋友参考。 1. SSL问题,用的是indyhttp控件,使用SSL时需要添加 IdSSLIOHandlerSocketOpenSSL1 组件 然后 idhttp的iohandler 属性指向 ...
Android端开发所需jar包和中文api文档, 需要的小伙伴下载下来,给楼主一点分数吧!
IOHandler = IdSSLIOHandlerSocketOpenSSL1 Host = 'smtp.qq.com' Port = 465 UseTLS = utUseImplicitTLS end object IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL Destination = 'smtp.qq....
JSON-RPC 2.0规范的Rust实现。 与http , ipc , websockets和tcp无关的传输和core服务器。 新的! 为支持。 子项目 jsonrpc-stdio-server jsonrpc派生 jsonrpc-server-utils jsonrpc-pubsub 例子 核 派生 ...
easysip基于sip协议的android通话客户端,协议栈jain-sip 媒体库使用webrtc
使用Indy的IdHTTP控件模拟网站的Get和POST操作
Java Nio ByteBuffer与Mina ByteBuffer的区别 Mina的几个类 与IoFilter相关的几个类 与IoHandler相关的几个类 IoFilter和IoHandler的区别和联系 配置Mina的线程模型
深入理解Apache_Mina_(3)----_与IoHandler相关的几个类 深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和联系 深入理解Apache_Mina_(5)----_配置Mina的线程模型 深入理解Apache_Mina_(6)----_Java_Nio_...
... 使用方法: 1.libeay32.dll和ssleay32.dll拷到exe所在目录下即可。 2.IdSSLIOHandlerSocket1属性面板设置SSLOption的Method为...IdHttp1.IOHandler:= IdSSLIOHandlerSocket1; memo1.text:= IdHttp1.get(furl);
IOHandler 从Channel中读取数据并交由Serializer处理的类,本身是异步读取数据 在读取数据时 提供读取完成回调 RPCClient 发送RPC请求的客户端 将调用目标的接口名,方法名,参数列表发送给服务器端。 设计上是线程...
TIdTCPClient中文乱码问题 我在进行indy10.5.7这个...在发的时候这样写IdTCPClient.IOHandler.WriteLn(HTTPEncode(edtMsg.Text)); 在收的时候这样写HTTPDecode(IdTCPClient.IOHandler.ReadLn); 就可以用汉字进行通讯了
mina学习资料 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长连接VS短连接 8 ...3.IoHandler接口 50 三. Mina实例 50 四. 其他 50
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步....第二步....第三步....第四步....第五步....二....3.IoHandler接口 50 三. Mina实例 50 四. 其他 50
代码很简单,代码很简单。 建议到家先行百度 下面是d7的 idFTP1.IOHandler.DefStringEncoding:=tencoding.UTF8;
indy 10 idtcpclient , indy 10.x 的tcpclient 使用IdTCPClient.IOHandler.Write 发送,代码 中解决了,如何 使用 IdTCPClient 发送之后,接收回消息包。
设置idhtp1.IOHandler属性为idslhndlrscktpnsl1 将openssl-1.0.1j-i386-win32.zip解压出来的libeay32.dll和ssleay32.dll放到exe所在路径 function httpAPIPost(url,param:string):string; var ResponseStream,...
mina框架介绍、主要接口介绍:IoService、IoAcceptor、IoConnector、IoSession、IoSessionConfig、IoHandler、IoBuffer、IoFuture等;信息分段处理demo、多路分离编解码demo、与Spring/JMX集成示例