Mina使用

news/2025/3/5 0:19:15/

在android项目中,与代理服务器之间通信一般都是采用TCP,由于在项目中要实现的功能中还有心跳,需要定时与服务器进行心跳交互,另外客户端要随时准备接收来自服务器的消息,因此采用了Mina,发现Mina使用起来挺方便的,就是要注意处理丢包、粘包问题,还有就是与Android activity之间的交互问题,这个比较重要。

结合http://www.iteye.com/topic/1112999这位大侠帮我一个大忙。但在开发过程发现还是会有许多问题:

1.Mina如何与activity交互

在项目Mina的handler的messageReceived中调用activity中的静态方法,若有变量,定义为类的静态变量。

2.Mina实现字节流传输

ByteBuffer byteBuffer = (ByteBuffer)message;
IoBuffer ioBuffer = IoBuffer.allocate(byteBuffer.capacity());
ioBuffer.put(byteBuffer.array());
ioBuffer.flip();
out.write(ioBuffer);

在MyProtocalEncoder 编码中实现如上。在MinaClient中加入自定义过滤器connector.getFilterChain().addLast("codec",
    new ProtocolCodecFilter(new MyProtocalFactory()));
MyProtocalFactory()包含自定义编码,解码。在解码时添加丢包等处理。
将要传输的字节流包装为ByteBuffer即可进行传输,也可直接封装为IoBuffer ,则无需上述编码。

3Mina调用activity的静态方法时,静态方法中提示框不起作用,报错:sending message handler into a dead thread。

解决方法:框必须在主线程中才能起作用,因此可利用主线程来启动提示框,在activity OnCreate中定义handler实现提示,然后在静态方法中使用handler.sendMeaasge()即可.

4.登录成功后,启动心跳线程,每隔30秒向服务器发送心跳消息,服务器可以接收到心跳,但是客户端接收不到服务器发来的。

原因:在获取登录验证返回消息时候,加入了Looper。登录成功之后兵没有结束。

解决:在收到验证消息的处理操作的验证成功中加入终止:Looper.myLooper.quit();

5.接收服务器消息,并进行activity切换

直接利用intent进行切换,利用自定义退出应用(每个activity启动时都入栈,退出时依次退出)获取当前activity实例

在Manifest配置文件对应activity添加属性android:theme="@andorid:style/Theme.Dialog"实现提示框activity


http://www.ppmy.cn/news/362333.html

相关文章

Mahalanobis(马氏)距离

当提到距离的时候,一般都会想到欧氏距离,更远一些还会想到范数,我们熟悉的欧式距离虽然很有用,但是也有明显的缺点,它将样本的不同属性(特征)之间的差别等同对待,但是在很多时候&…

MINA框架概述

1.MINA框架简介MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。…

maven --私服

一、私服简介 私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题 Nexus--Sonatype公司的一款maven私服产品 下载完成后解压 (1)启动服务器 如何使用这个服务器 ? (2)使用服务器 在浏…

玛雅人的故乡

“一道耀眼的亮光伴随着呼啸的响声划破了夜空的寂静。随之而来的是惊天动地的爆炸,巨大的蘑菇云腾空而起,刹那间山崩地裂、天昏地暗,世界笼罩在黑暗之中长达一年之久。饥饿和寒冷迫使统治地球长达一亿五千万年之久的恐龙灭绝了。”这是科学家…

Maven-私服简介

Maven 仓库管理也叫 Maven 私服或者代理仓库。使用私服可以用来管理公司自己的jar。 Nexus 是一个强大的 Maven 仓库管理工具,使用 Nexus 可以方便的管理内部仓库 同时简化外部仓库的访问。官网是:https://www.sonatype.com/ 1.打开命令行,…

[maven] maven

1.maven个人配置文件讲解 1.setting.xml文件包含全局设置文件和个人设置文件,全局设置文件为maven安装目录下的文件,个人设置文件一般在一下目录 Unix/Mac OS X - ~/.m2 Windows – C:\Documents and Settings\{your-username}\.m22.本地仓库存储位置依…

tome4linux,马基埃亚尔的传说 作弊码

使用说明 开启秘籍模式 在游戏 T-Engine4.0settings【注】新建一个 cheat.cfg 文件,输入 cheat true 保存 游戏中按以下组合键: 热键 作用 [Ctrl] L Lua 控制台 [Ctrl] A Debug 对话框 [Ctrl] S 存储游戏 [Ctrl] [Alt] [Shift] r 载入最后存档 按…

mina例子

所需jar包mina-core.jar,slf4j-api.jar,slf4j-jdk14.jar 最基本的对象,Server端 及其Handler用来接收消息;ProtocolCodecFactory包含decoder和encoder用来对消息进行编解码,可自定义也可使用mina自带的。 client端选…