昨天讲了Openfire的搭建和配置,今天来讲一下Smack。如果对如何搭建和配置Openfire的,可以参考Openfire/XMPP学习之——Openfire的安装、配置

  Smack是一个开源,易于使用的XMPP客户端类库。Smack API, 是一个 Java 的XMPP Client Library,也是由Jive Software开发。 优点:编程简单。 缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大,1台机器只能模拟有限(数千个)客户。Smack是一个用 java 写的XMPP客户端代码库, 是 spark 的核心。

  Smack实现给用户发送消息只要简短的三行,当然这是针对旧版的,最新版的4.0.3建议不要使用,因为会出现很多莫名其妙的错误,推荐使用Smack 3.2.2(点我点我)。

XMPPConnection connection = new XMPPConnection(”jabber.org“);
connection.login(”mtucker”, “password”);
connection.createChat(”jsmith@jivesoftware.com“).sendMessage(”Howdy!”);

  使用Smack发送消息,大致思路分以下几步:1、创建一个XMPPConnection对象;2、注册包监听器;3、登录;4、获取Chat对象,发送消息。

  以下是Java实现代码:

 package com.travellife.Smack;

 import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet; /**
* 一个简单的XMPPConnection示例
*/
public class Smack {
public static XMPPConnection con;
public static Chat newChat;
public static ChatManager chatmanager; public static void main(String[] args) throws InterruptedException {
try {
// 配置域和端口号,域可以换成IP地址
ConnectionConfiguration config = new ConnectionConfiguration(
"www.travellife.com", 5222);
// 新建一个XMPPConnection对象
con = new XMPPConnection(config); // 连接服务器
con.connect();
// 用户登录
con.login("lion", "1025263614");
// 是否已经通过身份验证
System.out.println("Authenticated = " + con.isAuthenticated()); addListener();
// 获取一个ChatManager对象
chatmanager = con.getChatManager();
newChat = chatmanager.createChat("lion@example.com",
new MessageListener() {
public void processMessage(Chat chat, Message message) {
System.out.println("I'm sending: "
+ message.getBody());
}
});
newChat.sendMessage("hi");
} catch (XMPPException e) {
e.printStackTrace();
} finally {
// 让线程休眠 然后再关闭连接
Thread.sleep(20000);
con.disconnect();
}
} private static void addListener() {
// 包的过滤器
PacketFilter filterMessage = new PacketTypeFilter(Message.class);
// 创建包的监听器
PacketListener myListener = new PacketListener() {
public void processPacket(Packet packet) {
// 以XML格式输出接收到的消息
System.out.println(packet.toXML());
System.out.println("From: " + packet.getFrom() + "\n");
System.out.println("Body: " + ((Message) packet).getBody()); try {
// 尝试发送消息给服务器
newChat.sendMessage("hi again");
} catch (XMPPException e) {
e.printStackTrace();
}
}
};
// 给连接注册一个包的监听器
con.addPacketListener(myListener, filterMessage);
}
}

  运行以上代码,你只会看到:Authenticated = true。这么一行输出,但你在Openfire的控制台发送管理消息,就可以看到如下输出:

  

作者:登天路

转载请说明出处:http://www.cnblogs.com/travellife/

最新文章

  1. java.sql.SQLException: Incorrect string value:
  2. xml+js+html的二级联动
  3. Modbus工业协议在Android中的应用
  4. mysql保存数据提示1366 Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ 解决
  5. js DOM 元素ID就是全局变量
  6. POJ 3169 Layout (spfa+差分约束)
  7. Cocos2dx开发(3)——Cocos2dx打包成APK,ANT环境搭建
  8. C++ primer 中文第三版 阅读笔记 第八章
  9. RabbitMQ消息队列(三):任务分发机制
  10. 你知道RxJava也可以实现AsyncTask吗?
  11. i春秋官网4.0上线啦 文末有福利
  12. ZabbixServer安装
  13. 内存(RAM或ROM)和FLASH存储的真正区别总结
  14. ie浏览器总跳转到 http://hao.360.cn
  15. JAVA程序中使用正则表达式
  16. B-Tree和B+Tree
  17. 异 形 卵 南阳acm709
  18. CodeForces - 1059D(二分+误差)
  19. Saga的实现模式——观察者(Saga implementation patterns – Observer)
  20. [HAOI2006]受欢迎的牛 tarjan缩点 BZOJ1051

热门文章

  1. Markdown 语法总结
  2. ACCEPTANCE CRITERIA FOR USER STORIES
  3. Oozie_初识
  4. ZXing二维码生成在Unity3D中出错,数组超出界限的解决办法
  5. $.each ---- 跳出当前的循环
  6. ecma6 yield
  7. 一鼓作气 博客--第五篇 note5
  8. JQuery中的dialog使用介绍
  9. WPF计算
  10. CSS 背景属性