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 = new XMPPConnection(”jabber.org“);

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

connection.createChat(”[email protected]“).sendMessage(”Howdy!”);

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

  以下是Java实现代码:

 1 package com.travellife.Smack;

 2 

 3 import org.jivesoftware.smack.Chat;

 4 import org.jivesoftware.smack.ChatManager;

 5 import org.jivesoftware.smack.ConnectionConfiguration;

 6 import org.jivesoftware.smack.MessageListener;

 7 import org.jivesoftware.smack.PacketListener;

 8 import org.jivesoftware.smack.XMPPConnection;

 9 import org.jivesoftware.smack.XMPPException;

10 import org.jivesoftware.smack.filter.PacketFilter;

11 import org.jivesoftware.smack.filter.PacketTypeFilter;

12 import org.jivesoftware.smack.packet.Message;

13 import org.jivesoftware.smack.packet.Packet;

14 

15 /**

16  * 一个简单的XMPPConnection示例

17  */

18 public class Smack {

19     public static XMPPConnection con;

20     public static Chat newChat;

21     public static ChatManager chatmanager;

22 

23     public static void main(String[] args) throws InterruptedException {

24         try {

25             // 配置域和端口号,域可以换成IP地址

26             ConnectionConfiguration config = new ConnectionConfiguration(

27                     "www.travellife.com", 5222);

28             // 新建一个XMPPConnection对象

29             con = new XMPPConnection(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("[email protected]",

42                     new MessageListener() {

43                         public void processMessage(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 void addListener() {

59         // 包的过滤器

60         PacketFilter filterMessage = new PacketTypeFilter(Message.class);

61         // 创建包的监听器

62         PacketListener myListener = new PacketListener() {

63             public void processPacket(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的控制台发送管理消息,就可以看到如下输出:

  

 

作者:登天路

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

你可能感兴趣的:(openfire)