Mina使用总结(三)MinaClient
简单的Mina客户端代码MinaSimpleClient.java:
package com.bypay.mina.client; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.future.ConnectFuture; 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; import com.bypay.mina.handler.ClientTimerHandler; /** * Mina客户端 * @author 唐延波 * @date 2015-1-20 * */ public class MinaSimpleClient { private static String HOSTNAME = "localhost"; private static int PORT = 9123; /** * @author 唐延波 * @throws InterruptedException * @date 2014-11-4 */ 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)); //等待连接建立 future.awaitUninterruptibly(); //获取session IoSession session = future.getSession(); //等待session关闭 session.getCloseFuture().awaitUninterruptibly(); //释放connector资源 //实际开发中,不要频繁关闭connector,因为它是重量级资源,应该设计成单例或者连接池 connector.dispose(); } }
处理消息发送和消息接收
ClientTimerHandler.java代码:
package com.bypay.mina.handler; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; /** * ClientHandler * * @author 唐延波 * @date 2015-1-20 * */ public class ClientTimerHandler extends IoHandlerAdapter { @Override public void sessionCreated(IoSession session) throws Exception { // session 创建时调用 session.write("test"); } @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 { // 出现异常 cause.printStackTrace(); session.close(true); } @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { // 心跳 System.out.println("客户端ide:"); } }
作者:风过无痕-唐
出处:http://www.cnblogs.com/tangyanbo/
本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。 如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。欢迎加QQ讨论群
出处:http://www.cnblogs.com/tangyanbo/
本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。 如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。欢迎加QQ讨论群
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?