• 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(”jsmith@jivesoftware.com“).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("lion@example.com",
    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() + "
    ");
    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/

    作者:登天路

    转载请说明出处:http://www.cnblogs.com/travellife/
    GitPages:http://www.littlejie.com/
  • 相关阅读:
    POJ 2794 Exploring Pyramids
    POJ 2282 The Counting Problem
    eclipse中设置java注释模板
    eclipse复制工程需要注意的地方
    extjs的强大利器GUI设计工具(extjs designer)
    eclipse项目名前出现红色感叹号,小红叉解决(转)
    上传一份个人学习struts2的历程笔记
    struts2中的action与actioncontext的理解
    J2EE后台UI系统框架搭建EXTJs使用(4.1 GPL版本)
    java.lang.OutOfMemoryError: Java heap space 解决方法转测试可用
  • 原文地址:https://www.cnblogs.com/travellife/p/3938715.html
Copyright © 2020-2023  润新知