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

昨天讲了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的控制台发送管理消息,就可以看到如下输出:

7c04bdb379d45284dd5643b40b431a4b.png

作者:登天路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值