`

asmack杂记

 
阅读更多

asmack的代码以及jar可以从 http://code.google.com/p/asmack/downloads/list 下载.

在android中创建一个service用来管理连接以及处理报文.

创建连接代码如下 ,其中server_ip是jabber服务器的ip, 可以是域名.

        Log.i(TAG, "ConnectManager in...");
        ConnectionConfiguration connConfig = new ConnectionConfiguration(server_ip);
        // connConfig.setSecurityMode(SecurityMode.disabled);
        connConfig.setSecurityMode(SecurityMode.required);
        connConfig.setSASLAuthenticationEnabled(false);
        connConfig.setCompressionEnabled(false);
        mConnection = new XMPPConnection(connConfig);

 

连接到服务器代码:

        if (!isConnect()) {
            Log.i(TAG, "Connect to server now...");
            try {
                // Connect to the server
                mConnection.connect();
                Log.i(TAG, "connect success!!!");
            } catch (XMPPException e) {
                Log.e(TAG, "connect failed!", e);
            }
        }

 

判断是否连接上:

    mConnection.isConnected();

 

登录到服务器代码, 需要用户名和密码:

        if (!isLogin()) {
            Log.i(TAG, "Login to server now...");
            try {
                mConnection.login(username, passwd);
                Log.i(TAG, "login success!!!");
            } catch (XMPPException e) {
                Log.e(TAG, "login failed!", e);
            }
        }

判断是否登录上:

     mConnection.isAuthenticated();

 

添加连接监听代码:

        mConnection.addConnectionListener(new ConnectionListener() {
            public void connectionClosed() {
                // TODO
            }

            public void connectionClosedOnError(Exception e) {
                // TODO
            }

            public void reconnectingIn(int seconds) {
                // Ignore
            }

            public void reconnectionFailed(Exception e) {
                // Ignore
            }

            public void reconnectionSuccessful() {
                // Ignore
            }
        });

 

添加包监听代码, 以名单列表为例:

      PacketFilter rosterFilter = new PacketTypeFilter(RosterPacket.class);
      mConnection.addPacketListener(new RosterPacketListener(), rosterFilter);

     其中 RosterPacket类是继承Packet类的,  除此之外还有 IQ,  Message,  Presence, AuthMechanism, Response五种类型的包.

可以使用OrFilter来同时处理多种类型的包. 以下代码用来接收所有的包:

        PacketFilter rosterPF = new PacketTypeFilter(RosterPacket.class);
        PacketFilter IQPF = new PacketTypeFilter(IQ.class);
        PacketFilter MSGPF = new PacketTypeFilter(Message.class);
        PacketFilter PresencePF = new PacketTypeFilter(Presence.class);
        PacketFilter AMPF = new PacketTypeFilter(AuthMechanism.class);
        PacketFilter REPF = new PacketTypeFilter(Response.class);
        
        OrFilter allPF = new OrFilter(rosterPF, IQPF);
        allPF.addFilter(MSGPF);
        allPF.addFilter(PresencePF);
        allPF.addFilter(AMPF);
        allPF.addFilter(REPF);
        PacketListener myListener = new PacketListener() {
            public void processPacket(Packet pk) {
                Log.i(TAG, "receive message : " + pk.toString());
            }
        };
        mConnection.addPacketListener(myListener, allPF);

 

 

以下是使用asmac过程中遇到的问题以及解决方法:

1)    java.net.SocketException: Bad address family 

解决方法, 在类中加入如下代码:

   static {
        java.lang.System.setProperty("java.net.preferIPv4Stack", "true");
        java.lang.System.setProperty("java.net.preferIPv6Addresses", "false");
    }

 

2) java.security.KeyStoreException: KeyStore jks implementation not found

解决方法, 在创建ConnectionConfiguration 时指定证书位置及类型:

        connConfig.setTruststorePath("/system/etc/security/cacerts.bks");
        connConfig.setTruststoreType("bks");

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    oracle杂记.doc

    oracle杂记.doc 这是我个人的总结。 主要是oracle的编程以及体系结构的理解。

    第14章 Pythonic与Python杂记.mp4

    第14章 Pythonic与Python杂记.mp4

    李特伍德 一个数学家的杂记.pdf

    李特伍德的《一个数学家的杂记》是一本收录了作者关于数学、教育以及个人观点文章的集合。这本杂记以数学为主题,涉及的内容包括几何、概率论、数论以及历史上的数学发现等。李特伍德在书中讨论了数学知识与日常生活...

    杂记:一家大鱼及其他

    杂记中所讲述的内容和描绘的场景,实际上蕴含了丰富的中国农村生活细节和风土人情,以及人性的细腻观察。以下是对这些内容的知识点解读: 首先,杂记中提到了家庭中烹饪的场景,特别强调了“蒸菜疙瘩”的制作过程。...

    计算机杂记

    ### 计算机基础知识知识点概览 ...它使用一系列的元素来构建页面结构和内容,如段落、链接、图片等。 - **特点**: - 结构清晰:通过标签来定义网页的不同组成部分。 - 跨平台性:可以在不同的操作系统和浏览器上...

    14.6 None|Pythonic与Python杂记|Python3.8入门 & 进阶 & 原生爬虫实战完全解读

    14.6_None|Pythonic与Python杂记|Python3.8入门_&_进阶_&_原生爬虫实战完全解读

    oracle 9i杂记

    《Oracle 9i杂记——探索PLSQL的世界》 Oracle 9i,作为Oracle数据库的一个重要版本,引入了许多新特性和改进,其中PL/SQL(Procedural Language/Structured Query Language)是其核心组成部分,是一种结合了SQL和...

    PD杂记体育ii已同居ikyht

    【数据库设计基础与PowerDesigner应用】 数据库设计是IT领域中至关重要的部分,它涉及概念设计、逻辑设计和物理设计等多个阶段。在概念设计阶段,我们主要关注实体、属性和联系集,这些都是构建数据库模型的基础...

    installshield安装制作杂记

    installshield安装制作杂记 installshield x

    反爬杂记日常记录十一字

    反爬杂记日常记录十一字

    爬虫杂记日常记录十一字

    爬虫杂记日常记录十一字

    个人笔记美食杂记生活等

    个人笔记美食杂记生活等

    Hadoop大数据平台运维杂记.pptx

    Hadoop大数据平台运维杂记 Hadoop大数据平台运维杂记是关于Hadoop大数据平台的运维经验总结,主要涵盖了Hadoop集群的使用情况、安装升级、Cloudera Manager、Hadoop的发展历程、常见事故处理等方面的内容。 一、...

    51单片机P89V51学习杂记.rar

    《51单片机P89V51学习杂记》是针对电子工程初学者以及对51单片机有兴趣的开发者提供的一份宝贵资源。这份压缩包包含了关于51单片机及其应用的深入学习材料,特别是侧重于P89V51型号的单片机。下面将对其中的主要知识...

    狱中杂记教学设计.pdf

    狱中杂记教学设计.pdf

    山中杂记.doc

    《山中杂记》是高雪梅老师2013年教授的一篇语文课,属于义务教育课程标准实验教科书北师大版六年级下册第一单元的第一课。这篇文章是冰心在1923年留美期间因病在青山沙穰疗养院所作,原本是一组共十篇的散文,我们...

    51单片机C语言学习杂记

    本资料“51单片机C语言学习杂记”旨在帮助读者掌握51单片机的基础知识,并通过C语言进行编程实践。 51单片机的核心部件包括CPU、存储器(包括ROM、RAM)、定时器/计数器、串行通信接口、并行I/O端口等。其中,CPU...

    互联网杂记(六).docx

    互联网杂记(六).docx

    工作杂记-YUV的dump和read

    工作杂记-YUV的dump和read

Global site tag (gtag.js) - Google Analytics