安卓xmpp简单介绍(登录)以及自签名证书的使用

本文介绍了安卓应用如何支持XMPP协议,包括asmack客户端库的使用和openfire服务端的配置。详细讲解了XMPP的DIGEST-MD5登录交互过程,并重点阐述了在SSL协议下,如何处理自签名证书的问题,包括生成合法证书、客户端加载证书的步骤,以确保安全的XMPP连接。
摘要由CSDN通过智能技术生成

安卓xmpp简单介绍(登录)以及自签名证书的使用

概念

OSI七层模型

开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。
它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,具体参考[百度百科]。

七层模型的介绍网络上很多,这里不浪费篇幅,主要给初学者举几个例子,可能印象更深,初级java开发常接触到的协议以及所属的层分别为:

IP(Internet Protocol)-网络层

TCP(Transmission Control Protocol)-传输层

UDP(User Datagram Protocol)-传输层

SSL(Secure Sockets Layer)-传输层和应用层之间

TLS(Transport Layer Security)-传输层和应用层之间

HTTP(HyperText Transfer Protocol)-应用层

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)-应用层

FTP(File Transfer Protocol)-应用层

SFTP(Secure File Transfer Protocol)-应用层

TELNET-应用层

DNS(Domain Name System)-应用层

XMPP

Extensible Messaging and Presence Protocol,(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。
这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。属于应用层范畴,在TCP或TLS之上进行数据的封装。

安卓应用支持xmpp

asmack(客户端)

asmack是一个开源软件,支持在安卓应用上封装实现xmpp协议的交互功能。近期由于smack在4之后支持了安卓,因此smack自2015年2月后不再更新,
asmack只有一个jar包,因此集成比较方便,本文示例代码仍旧以asmack为例(与smack大同小异)。
jar和源码:http://asmack.freakempire.de/4.0.7/

openfire(服务端)

openfire是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。 Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
下载地址:https://www.igniterealtime.org/projects/openfire/

协议的介绍

网络上很多,本文不再赘述,贴几个随手能搜到的帖子:

XMPP-百度百科

XMPP协议实现原理介绍

示例代码

初始化
config = new ConnectionConfiguration(host, port, serviceName);
config.setDebuggerEnabled(true);
config.setCompressionEnabled(false);
config.setReconnectionAllowed(true);
config.setSecurityMode(SecurityMode.disabled); // 是否开启TLS
SASLAuthentication.registerSASLMechanism("MyMechanism", MyMechanism.class);// 新增自定义的登录校验机制
SASLAuthentication.supportSASLMechanism("MyMechanism", 0); // 设置登录校验器的序号,序号小的会优先选择

serviceName即openfire的domain,可以在openfire管理台上查到,一般为计算机名。

asmack默认集成了”DIGEST-MD5”、”PLAIN”、”ANONYMOUS”等几种校验器,具体参考源码:SASLAuthentication.java

登录
connection = new XMPPTCPConnection(config);
connection.addPacketListener(new PacketListener()
{
    @Override
    public void processPacket(Packet packet)
    {
        processReceivedMessage(packet);// 接收消息后的处理,可以根据消息类型做业务逻辑
    }
}, new PacketFilter()
{
    @Override
    public boolean accept(Packet packet)
    {
        return true;
    }
});
connection.connect();
connection.login(userName, password, resource);//resource为资源名,可以为空。

连接相关操作不能在主线程中进行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值