文档章节

Smack Overview

墨梅
 墨梅
发布于 2014/04/24 15:26
字数 1719
阅读 96
收藏 1
点赞 0
评论 0

翻译这个文档的主要原因是为了同Gtalk进行通信,利用Smack来实现自己的机器人等等服务。主要是没有接触其他的Jabber的Java类库,所以没有比较这些类库之间的差别。不过就这一段时间的使用,感觉Smack确实是简单易用! 
现在开始Smack的Tut。如果你也对Smack感兴趣,或对与Gtalk通信感兴趣,你可以留言进行交流,或到我的Google论坛进行交流。 

1:Smack是一个简单的,功能强大的类库。给用户发送信息只需三行代码便可完成 
XMPPConnection connection = new XMPPConnection(”jabber.org“); 
connection.login(”mtucker”, “password”); 
connection.createChat(”jsmith@jivesoftware.com“).sendMessage(”Howdy!”); 
2:不会强迫你向其他类库那样,在信息包层面进行编码。它提供了更加智能化的类比如Chat和Groups,能使你的工作更富效率。 
3:不需要你熟悉XMPP XML格式,甚至是XML格式。 
4:易于实现机-机对话。 
5:Apace License下的开源软件。你可以把它用于你的商业或非商业应用程序。 

关于XMPP 

怎样使用这个文档 
这个文档假定你熟悉XMPP及时消息的主要特征。并热切的希望你能在阅读本文档的时候打开Java Doc API作为参考。 

  • Getting stared with Smack 
    续上 Smack Overview 
    这个文档向你介绍一下Smack API以及它里面的重要类库和观念。 

    建立连接 
    XMPPConection用来同XMPP SERVER建立连接。创建SSL连接的话,需要使用SSLXMPPConection类。下面的代码说明了怎样建立连接 

    // Create a connection to the jabber.org server. 
    XMPPConnection conn1 = new XMPPConnection(”jabber.org”); 

    // Create a connection to the jabber.org server on a specific port. 
    XMPPConnection conn2 = new XMPPConnection(”jabber.org”, 5222); 

    // Create an SSL connection to jabber.org. 
    XMPPConnection connection = new SSLXMPPConnection(”jabber.org”); 

    一旦你建立了连接,你就可以通过XMPPConnection.login(String username, String password)方法,使用你的用户名和密码进行登录。登录成功后,可以创建Chat或GroupChat对象来和其他用户进行交流了。 

    好友列表 
    Roster 类可以用来跟踪每一个用户的状态。你可以把用户归入不同的组比如”Friends”或”Co-worker”,也可以判定用户是否online或 offline。通过XMPPConnection.getRoster()能够获得好友列表,Roster类允许你遍历好友列表,弄清他们是什么名字, 属于那个组,是否在线等等。 

    读写消息包(Reading Or Writing Packet) 
    从客户端发向XMPP SERVER的消息成为包(Packet),通过XML格式发送。org.jivesoftware.smack.packet包包含了这些类,他封装了 XMPP允许的三个不同类型的基本包(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 XMPPConnection instance called “con”). 
    con.sendPacket(presence); 

    Smack提供两种方式来读将要到来的包(Packet): PacketListener和PacketCollector。 两者都使用PacketFilter来决定该处理那种类型的包(Packet).PacketListener常常用在事件驱动的程序中;而 PacketCollector维护一个包(Packet)的结果队列,你可以在其上进行Polling和Blocking操作。当包(Packet)到 来时引发某些事件的时候,使用PacketListener最好不过;而PacketCollector常常用来等待某个特定的包(Packet)。这两 种对象都可以通过XMPPConnection的实例来创建。 

    Messaging using Chat and GroupChat 

    接上 Getting stared with Smack 
    及时通讯的核心是收发信息。Smack提供两个类Chat、GroupChat来完成这项工作。 

    # org.jivesoftware.smack.Chat — 两人交谈 
    # org.jivesoftware.smack.GroupChat — 加入聊天室同多个人进行交谈 
    这两个类都使用org.jivesoftware.smack.packet.Message包类(Packet Class)来收发消息。在某些时候,你可能想不通过这两个类,而是直接收发消息。 

    Chat 
    一个Chat在两个用户之间创造一个新的消息线程。下面的代码段说明了如何进行创建Chat,并发送消息 

    // Assume we’ve created an XMPPConnection name “connection”. 
    Chat newChat = connection.createChat(”jsmith@jivesoftware.com“); 
    newChat.sendMessage(”Howdy!”); 

    Chat.sendMessage(String)方法是一个快捷方法:它首先创建一个Message对象,然后设置消息体,最后发送消息。如果你想在发送消息前增加其他熟悉,你可以使用如下的代码段: 

    // Assume we’ve created an XMPPConnection name “connection”. 
    Chat newChat = connection.createChat(”jsmith@jivesoftware.com“); 
    Message newMessage = newChat.createMessage(); 
    newMessage.setBody(”Howdy!”); 
    message.setProperty(”favoriteColor”, “red”); 
    newChat.sendMessage(newMessage); 

    Chat允许你很容易的侦听对方的回复。下面的代码段是一个应声虫,它回显对方输入的信息 

    // Assume we’ve created an XMPPConnection name “connection”. 
    Chat newChat = connection.createChat(”jsmith@jivesoftware.com“); 
    newMessage.setBody(”Hi, I’m an annoying parrot-bot! Type something back to me.”); 
    while (true) { 
    // Wait for the next message the user types to us. 
    Message message = newChat.nextMessage(); 
    // Send back the same text the other user sent us. 

    newChat.sendMessage(message.getBody()); 

    使用Chat.nextMessage()方法来获取下一个Message,它会无限期的等,直到有下一个消息。还有别的方法可以为新消息指定一段特定的事件,也可以使用事件驱动模式,当消息来时通知你。 
    GroupChat 
    群组聊天允许你连接到聊天室,你可以和组内的人进行通信。在发送和接受消息前,你必须使用一个组名(昵称)来加入某个组。下面的代码段说明了如何加入组并发送消息: 

    // Assume we’ve created an XMPPConnection name “connection”. 
    GroupChat newGroupChat = connection.createGroupChat(”test@jivesoftware.com“); 
    // Join the group chat using the nickname “jsmith”. 
    newGroupChat.join(”jsmith”); 
    // Send a message to all the other people in the chat room. 
    newGroupChat.sendMessage(”Howdy!”); 
    一般来说,在组内收发消息和两人对话类似。并且提供了列出组内其他人的方法。 

  • 使用Java链接Gtalk服务 

    既然想和 Gtalk通信,那么首先怎样才能用Java连上Gtalk呢?而Gtalk采用了基于Jabber的 XMPP协议, 一个开源的即时通信平台,那么他肯定兼容任何一个使用XMPP协议的库。很幸运,Jive SoftWare的Smack就是这样一个简单的而且好用的Jabber 客户端类库。 从Smack2.0后,增加了GoogleTalkConnection,这样你就可以非常简单的连接Gtalk服务器了,不用再设定Host、Port了 。使用下面几行代码就可以连接到Gtalk了: 

    GoogleTalkConnection con = new GoogleTalkConnection(); 
    con.login(”joesmith”, “password”); 
    con.createChat(”maryjane@gmail.com”).sendMessage(”Howdy!”); 
    con.close(); 

    在测试过程�发现应该注意下面的一些问题: 

    login�的用户名是不需要@gmail.com这个后缀的 
    接受方一定要是对方Gtalk的全称。 
    接受方应该在你的好友列表里面,负责对方会收不到任何信息的。 
    很简单,但还是比较有趣的。比如你可以把某个文本�的内容一行行的读出来,然后发送给对方,就像看小说一样。呵呵!

© 著作权归作者所有

共有 人打赏支持
墨梅
粉丝 15
博文 211
码字总数 43367
作品 0
杭州
后端工程师
Smack 4.0 正式发布,XMPP 客户端开发包

Smack 4.0 正式发布,该版本进行大量的重构以及底层系统的一些调整,包括使用 Gradle 替代 Ant,使用 Git 替代 SVN 等。同时该版本包含安全方面的更新,建议尽快升级。 升级指南:https://c...

oschina ⋅ 2014/06/09 ⋅ 8

Smack 4.1.0 发布,XMPP 开发包

Smack 4.1.0 发布,此版本主要修改信息如下: [SMACK-65] - Packet parsing should look for depth [SMACK-237] - Handle more vCard values (XEP-0054) [SMACK-383] - Allow the garbage co......

oschina ⋅ 2015/03/30 ⋅ 3

Smack 4.2.4 发布,开源 XMPP 客户端库

Smack 4.2.4 已发布,Smack 是一个开源,易于使用的 XMPP(jabber) 的 Java 客户端类库,Smack 的 patchlevel 版本与 API 兼容。 Bug [SMACK-804] - ServiceAdministrationManager does not ...

周其 ⋅ 04/17 ⋅ 0

Smack 4.1.8 和 4.2.0-beta2 发布

Smack 4.1.8 和 4.2.0-beta2 发布了。Smack是一个开源,易于使用的XMPP(jabber)的 Java 客户端类库。 Smack 4.1.8修复了几个小问题,预计将是4.1分支的最后一个版本。 更新内容: [SMACK-7...

oschina ⋅ 2016/07/31 ⋅ 0

Smack 4.1.3 发布,XMPP 开发包

Smack 4.1.3 发布,这是一个 bug 修复版本,可以作为任何 Smack 4.1 版本简易替换版本。鼓励用户更新,因为 Smack 4.1.2 在 Roster API 引入了一项内存泄露,已被 4.13 修复。更新内容如下:...

oschina ⋅ 2015/07/16 ⋅ 1

Smack 4.1.7 和 4.2.0-beta1 发布

Smack 4.1.7 和 4.2.0-beta1 发布了。Smack是一个开源,易于使用的XMPP(jabber)的 Java 客户端类库。 改进记录如下: [SMACK-712] - XMPPTCPConnection's setEnabledSSL(Protocols|Cipher...

oschina ⋅ 2016/04/16 ⋅ 0

Smack 4.1.0 RC3/Smack 4.2.0 Alpha 发布

Smack 是一个开源,易于使用的XMPP(jabber)的 Java 客户端类库。 Ignite Realtime 社区现在作为 XMPP Standards Foundation (XSF) GSOC organization 中的一员,参与了 Google Summer of C...

oschina ⋅ 2015/03/10 ⋅ 5

Smack 4.1.6/4.2.0-alpha3 发布

Smack 4.1.6/4.2.0-alpha3 发布,更新如下: 4.1.6 -- 2016-01-23 Bug [SMACK-705] - PubSub's Affiliation.getElementName() returns wrong name [SMACK-706] - Smack may sends and twice......

oschina ⋅ 2016/01/28 ⋅ 0

用smack+openfire做即时通讯

首发:个人博客 必须说明:smack最新的4.1.1,相对之前版本变化很大,而且资料缺乏,官方文档也不好,所以还是用老版本3.2.2吧。这篇博文中的代码是4.1.1版的,但不推荐用它。 用openfire做服...

祁达方 ⋅ 2015/08/19 ⋅ 0

数据库压力测试工具--Super Smack

Super-smack 是一个强大的广受赞誉的压力测试工具,支持MySQL和PostgreSQL。这个工具程序现在由 Tony Bourke 维护。 安装 Super-smack 现在是1.3版,源码下载地址如下: http://vegan.net/t...

匿名 ⋅ 2011/09/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 7

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部