Smack:入门

本文深入探讨了SmackAPI的核心组件,包括如何建立与XMPP服务器的连接,管理用户名单,以及如何发送和接收消息。重点介绍了SmackAPI提供的JAR文件及其用途,以及如何使用Connection类进行连接配置。此外,还详细说明了如何通过Roster类处理用户列表,并展示了如何使用PacketListener和PacketCollector处理XML格式的packet。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个文档将会想你介绍Smack API,并为重要的类和概念提供一个概览。 

 

JAR文件和要求 

Smack很容易嵌入到任何存在的JDK1.5或者更高版本的Java应用程序。它没有外部依赖(除了Jingle语音聊天功能)并且尽可能优化的更小。这个库有几个JAR文件,基于应用程序需要哪些特性灵活的提供: 

  • smack.jar--提供核心XMPP功能,并且是唯一被要求的库。所有XMPP RFC包含的XMPP功能。 

  • smackx.jar--支持XMPP标准基金会定义的许多扩展(XEPs),包含多用户聊天,文件传输,用户搜索,等。这个扩展在extensions manual中被记录。 

  • smackx-debug.jar--一个增强的图形协议传输调试器。当在classpath被找到并且当启动debugging的时候它将自动使用。 

 

建立一个连接 

XMPPConnection类被用于简历一个和XMPP服务器的连接。下面的代码示例简历了一个连接: 

// Create a connection to the jabber.org server. Connection conn1 = new XMPPConnection("jabber.org"); conn1.connect();  
// Create a connection to the jabber.org server on a specific port.  
ConnectionConfiguration config = new ConnectionConfiguration("jabber.org", 5222); Connection conn2 = new XMPPConnection(config); conn2.connect(); 
主要到当以默认的方式连接服务器的时候(并且可能的时候)最大的安全机制将会被使用。包含使用TLS加密。ConnectionConfiguration类提供了对连接创建的高级控制,例如禁用和启动加密的能力。详情请查阅Connection Management。 

 

一旦你创建了一个连接,你应该使用Connection.login(String username,String password)方法用用户名和密码登陆。一旦你登陆了,你可以通过创建一个新的Char或者GroupChat对象和其它用户聊天。 

 

处理名单 

名单让你跟踪其它用户的可用性(存在)。用户能被分组,例如"Friends"和"Co-workers",并且然后你发现是否每个用户在线或者不在线。 

 

使用Connection.getRoster()方法获取名单。Roster类允许你找到所有名单实体,它们属于的群组,和每个实体的当前存在状态。 

 

读和写Packet 

每个从客户端发送给XMPP服务器的消息被称为packet,并且以XML发送。org.jivesoftware.smack.packet包包含封装XMPP支持的三个不同基本paket类型(message,presence,和IQ)的类。例如Chat类和GroupChat类提供了更高级的构造,自动管理创建和发送packet,但是你也能直接创建和发送packet。下面是一个代码示例用改变你的存在,让人们知道你不可用并且”下线“: 

// Create a new presence. Pass in false to indicate we're unavailable. 
Presence presence = new Presence(Presence.Type.unavailable); 
presence.setStatus("Gone fishing");  
// Send the packet (assume we have a Connection instance called "con"). 
con.sendPacket(presence); 
Smack提供了两种方式来读取接收的packet:PacketListener,和PacketCollector。并使用PacketFilter实例来确定哪个packet被处理。packet监听器是使用事件编程风格,然而packet Collector有一个packet结果队列,你能执行做轮训和阻塞操作。所以,packet listener当你想在packet无论什么时候接收的时候执行一些动作时非常有用,然而packet collector当你向等待一个指定的packt到达的时候非常有用。Packet collector和listener能使用一个Connection实例创建。


新技术,新未来!欢迎大家关注“1024工场”微信服务号,时刻关注我们的最新的技术讯息!(甭客气!尽情的扫描或者长按!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值