现在的位置: 首页 > 综合 > 正文

Smack 结合 Openfire服务器,建立IM通信,发送聊天消息

2013年01月27日 ⁄ 综合 ⁄ 共 3799字 ⁄ 字号 评论关闭

在文章开始,请你了解和熟悉openfire方面的相关知识,这样对你理解下面代码以及下面代码的用途有很好的了解。同时,你可能需要安装一个简单的CS聊天工具,来测试你的代码是否成功的在openfire服务器上建立会话链接,并成功的向在线用户发送聊天消息。

必须了解:http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html

http://www.cnblogs.com/hoojo/archive/2012/05/13/2498151.html (非windows 系统)

可选:http://www.cnblogs.com/hoojo/archive/2012/05/17/2506845.html

http://www.cnblogs.com/hoojo/archive/2012/06/18/2553975.html

 

聊天软件Spark,用于测试聊天消息发送是否成功,下载地址:http://www.igniterealtime.org/downloads/download-landing.jsp?file=spark/spark_2_6_3.exe

 

然后你需要添加smack相关的jar包

smack.jar
smackx.jar

jar包下载地址:http://www.igniterealtime.org/downloads/download-landing.jsp?file=smack/smack_3_2_2.zip

代码中还用到了junit,junit jar下载地址:http://ebr.springsource.com/repository/app/bundle/version/download?name=com.springsource.org.junit&version=4.8.2&type=binary

 

下面开始代码部分

package com.hoo.smack;

 

import java.util.Collection;

import java.util.Iterator;

import javax.net.SocketFactory;

import org.jivesoftware.smack.AccountManager;

import org.jivesoftware.smack.Chat;

import org.jivesoftware.smack.ChatManager;

import org.jivesoftware.smack.Connection;

import org.jivesoftware.smack.ConnectionConfiguration;

import org.jivesoftware.smack.MessageListener;

import org.jivesoftware.smack.Roster;

import org.jivesoftware.smack.RosterEntry;

import org.jivesoftware.smack.XMPPConnection;

import org.jivesoftware.smack.XMPPException;

import org.jivesoftware.smack.packet.Message;

import org.jivesoftware.smack.packet.Presence;

import org.jivesoftware.smack.packet.Session;

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

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

 

/**

 * <b>function:</b> 利用Smack框架完成 XMPP 协议通信

 * @author hoojo

 * @createDate 2012-5-22 上午10:28:18

 * @file ConnectionServerTest.java

 * @package com.hoo.smack.conn

 * @project jwchat

 * @blog http://blog.csdn.net/IBM_hoojo

 * @email hoojo_@126.com

 * @version 1.0

 */

public class SmackXMPPTest {

 

    private Connection connection;

    private ConnectionConfiguration config;

    /** openfire服务器address */

    private final static String server = "192.168.8.32";

    

    private final void fail(Object o) {

        if (o != null) {

            System.out.println(o);

        }

    }

    

    private final void fail(Object o, Object... args) {

        if (o != null && args != null && args.length > 0) {

            String s = o.toString();

            for (int i = 0; i < args.length; i++) {

                String item = args[i] == null ? "" : args[i].toString();

                if (s.contains("{" + i + "}")) {

                    s = s.replace("{" + i + "}", item);

                } else {

                    s += " " + item;

                }

            }

            System.out.println(s);

        }

    }

    

    /**

     * <b>function:</b> 初始Smack对openfire服务器链接的基本配置

     * @author hoojo

     * @createDate 2012-6-25 下午04:06:42

     */

    @Before

    public void init() {

        try {

            //connection = new XMPPConnection(server);

            //connection.connect();

            /** 5222是openfire服务器默认的通信端口,你可以登录http://192.168.8.32:9090/到管理员控制台查看客户端到服务器端口 */

            config = new ConnectionConfiguration(server, 5222);

            

            /** 是否启用压缩 */ 

            config.setCompressionEnabled(true);

            /** 是否启用安全验证 */

            config.setSASLAuthenticationEnabled(true);

            /** 是否启用调试 */

            config.setDebuggerEnabled(false);

            //config.setReconnectionAllowed(true);

            //config.setRosterLoadedAtLogin(true);

            

            /** 创建connection链接 */

            connection = new XMPPConnection(config);

            /** 建立连接 */

            connection.connect();

        } catch (XMPPException e) {

            e.printStackTrace();

        }

        fail(connection);

        fail(connection.getConnectionID());

    }

    

    @After

    public void destory() {

        if (connection != null) {

            connection.disconnect();

            connection = null;

        }

    }

    

    /**

     * <b>function:</b> ConnectionConfiguration 的基本配置相关信息

     * @author hoojo

     * @createDate 2012-6-25 下午04:11:25

     */

    @Test

    public void testConfig() {

        fail("PKCS11Library: " + config.getPKCS11Library());

        fail("ServiceName: {0}", config.getServiceName());

        // ssl证书密码

        fail("TruststorePassword: {0}", config.getTruststorePassword());

        fail("TruststorePath: {0}", config.getTruststorePath());

        fail("TruststoreType: {0}", config.getTruststoreType());

        

        SocketFactory socketFactory = config.getSocketFactory();

        fail("SocketFactory: {0}", socketFactory);

        /*try {

            fail("createSocket: {0}", socketFactory.createSocket("localhost", 3333));

        } catch (IOException e) {

            e.printStackTrace();

        }*/

    }

    

    /**

     * <b>function:</b> Connection 基本方法信息

     * @author hoojo

     * @createDate 2012-6-25 下午04:12:04

     */

抱歉!评论已关闭.