博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mina的客户端
阅读量:5257 次
发布时间:2019-06-14

本文共 2738 字,大约阅读时间需要 9 分钟。

(一)

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!");	}}

 

转载于:https://www.cnblogs.com/wangjianly/p/8462379.html

你可能感兴趣的文章
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
使用 SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>