昨天讲了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 = newXMPPConnection(”jabber.org“);

connection.login(”mtucker”, “password”);

connection.createChat(”jsmith@jivesoftware.com“).sendMessage(”Howdy!”);

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

以下是Java实现代码:

1 packagecom.travellife.Smack;2

3 importorg.jivesoftware.smack.Chat;4 importorg.jivesoftware.smack.ChatManager;5 importorg.jivesoftware.smack.ConnectionConfiguration;6 importorg.jivesoftware.smack.MessageListener;7 importorg.jivesoftware.smack.PacketListener;8 importorg.jivesoftware.smack.XMPPConnection;9 importorg.jivesoftware.smack.XMPPException;10 importorg.jivesoftware.smack.filter.PacketFilter;11 importorg.jivesoftware.smack.filter.PacketTypeFilter;12 importorg.jivesoftware.smack.packet.Message;13 importorg.jivesoftware.smack.packet.Packet;14

15 /**

16 * 一个简单的XMPPConnection示例17 */

18 public classSmack {19 public staticXMPPConnection con;20 public staticChat newChat;21 public staticChatManager chatmanager;22

23 public static void main(String[] args) throwsInterruptedException {24 try{25 //配置域和端口号,域可以换成IP地址

26 ConnectionConfiguration config = newConnectionConfiguration(27 "www.travellife.com", 5222);28 //新建一个XMPPConnection对象

29 con = newXMPPConnection(config);30

31 //连接服务器

32 con.connect();33 //用户登录

34 con.login("lion", "1025263614");35 //是否已经通过身份验证

36 System.out.println("Authenticated = " +con.isAuthenticated());37

38 addListener();39 //获取一个ChatManager对象

40 chatmanager =con.getChatManager();41 newChat = chatmanager.createChat("lion@example.com",42 newMessageListener() {43 public voidprocessMessage(Chat chat, Message message) {44 System.out.println("I'm sending: "

45 +message.getBody());46 }47 });48 newChat.sendMessage("hi");49 } catch(XMPPException e) {50 e.printStackTrace();51 } finally{52 //让线程休眠 然后再关闭连接

53 Thread.sleep(20000);54 con.disconnect();55 }56 }57

58 private static voidaddListener() {59 //包的过滤器

60 PacketFilter filterMessage = new PacketTypeFilter(Message.class);61 //创建包的监听器

62 PacketListener myListener = newPacketListener() {63 public voidprocessPacket(Packet packet) {64 //以XML格式输出接收到的消息

65 System.out.println(packet.toXML());66 System.out.println("From: " + packet.getFrom() + "\n");67 System.out.println("Body: " +((Message) packet).getBody());68

69 try{70 //尝试发送消息给服务器

71 newChat.sendMessage("hi again");72 } catch(XMPPException e) {73 e.printStackTrace();74 }75 }76 };77 //给连接注册一个包的监听器

78 con.addPacketListener(myListener, filterMessage);79 }80 }

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

作者:登天路

java xmpp openfire_Openfire/XMPP学习之——一个简单的Smack样例相关推荐

  1. 【原创】一个简单的StreamInsight样例分析:MarketMonitor

    MarketMonitor是2009年微软专业开发者大会上StreamInsight小组资深程序经理Torsten Grabs演讲中的第一个StreamInsight Demo.这个Demo演示了如何 ...

  2. Oracle简单脚本演示样例

    Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR           VARCHAR2( ...

  3. 一个用户故事的样例(极限编程)

    用户故事是从用户的角度对系统功能的描述,通过与用户一起探讨而得出,事实上XP的实践应由用户亲手撰写用户故事,但对很多用户来说并不容易,所以很多的实践过程中是开发人员和用户一起撰写. 开发人员依照用户故 ...

  4. Hibernate学习——建立一个简单的Hibernate项目

    最近老师让做个web小应用,大三的时候学习过一点J2EE的东西,也做过一些web相关的XXX管理系统,都是用servlet,jsp这些完成的,虽然勉强能够完成任务,但其中各种代码掺杂在一起,不好看而且 ...

  5. Java Tread多线程(0)一个简单的多线程实例

    作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39341887 本文演示,一个简单的多线程实例,并简单分析一下线程. 编程多 ...

  6. C语言学习笔记---一个简单的文件压缩示例

      通过一个简单的文件文件压缩例子,来学习文件操作的相关函数.该程序以只读的方式 "r" 打开第一个文件,以只写的方式"w"打开第二个文件.将第一个文件中每隔3 ...

  7. Java网络编程(一)- 一个简单的服务端/客户端应用程序

    在Java中,我们使用java.net.Socket及其相关类来完成有关网络的相关功能.Socket类非常简单易用,因为Java技术隐藏了建立网络连接和通过连接发送数据的复杂过程.下面所说的内容只适用 ...

  8. java jws web_java 用jws发布一个简单的webservice

    第一步: 定义一个简单webservice接口 package Interface; import javax.jws.WebParam; import javax.jws.WebService; @ ...

  9. verilog学习:一个简单的入门verilog例子

    前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,只想传输一个观点:刚开始学习的时候,建议直接通过视频学习,当您有收获时,再去查阅书籍,把它们当成工具书 ...

最新文章

  1. Hello world!
  2. BCH能达到它的宣传吗?现实世界压力测试即将到来!
  3. 从零开始学android开发-IDE空间不够报错
  4. Java工作笔记-对反射的进一步理解
  5. 记录一次 Win10 通过 VirtualBox安装CentOS7 的辛酸史
  6. py导入包异常跳出_马克的Python学习笔记#模块和包
  7. MongoDB(一)——简介
  8. solr获取同义词 java_如何在使用缩写及其全名搜索时使solr同义词获取相同的结果(相同的数字和顺序)...
  9. 2017 十款最佳iPhone渗透APP及工具
  10. vsftp虚拟账户登录失败331 Please specify the password.
  11. backtrader概念(二)Trade
  12. mysql数据库服务器重启_重启mysql数据库服务器
  13. R语言 tidyverse 之数据处理:dplyr (中)
  14. 父与子的编程之旅--easygui无法使用
  15. 机器学习(八)SVM支持向量机
  16. android word分页,控制分页
  17. CleanMyMac2023一键清除垃圾缓存和恶意广告插件 时刻保持Mac畅快运行
  18. HBuildx中使用vant的ui框架
  19. 有赞商城如何对接ERP、CRM系统?
  20. 【机器学习 吴恩达】2022课程笔记(持续更新)

热门文章

  1. 计算机安全培训考试利弊,人机对话考试是什么意思 有哪些利弊
  2. margin:10px 5px 15px 20px含义
  3. vue3下的uniapp跨域踩坑
  4. 心理学上10点建议,打造更好的用户体验
  5. Codeforces553 D. Nudist Beach(二分+队列check)
  6. 冰山立方体BUC算法(附测试集和完整代码)
  7. Android基础之结束所有Activity通用方法
  8. 导电滑环被广泛用于工业机器人系统
  9. 大数据在市场营销方面的几大优势
  10. 【JavaScript】同步与异步-异步与并行-异步运行机制-为什么要异步编程-异步与回调-回调地狱-JavaScript中的异步操作