smack+openfire,1对1的IM通信(openfire学习记录一)

Openfire构成

服务端:

Openfire单台支持1W并发,核心通信方式mina,通信协议xmpp

客户端
Smack 提供java语言API客户端
Spark 提供Openfire的桌面客户端,使用Smack客户端集成与Openfire服务器通信

实战篇

第一步:

先安装openfire服务端,下载安装包,下载地址为:http://www.igniterealtime.org/downloads/index.jsp。解压启动openfire服务地址为http://IP:9090/

,安装过程中要提前创建openfire数据库,其他填写正确资料点击下一步即可。

 

第二步:

安装Spark对open服务端,下载安装包最好是使用Windows客户端测试,下载地址同上。Spark客户端为exe,点击执行即可

 

第三步:

使用Spark客户端连接openfire通信测试。使用Spark无法手动注册用户,密钥验证不通过,报(图一)错误,可能是由于我域名使用的IP地址导致。只能通过Openfire服务添加用户信息如(图二)。添加完成后,在Spark上登录前,需设置高级选项,如下(图三),假如域名是ip,必须勾选倒数第二个复选框,方能登录成功。

17182fa795147a8f6f63d15025071816fed.jpg

                                                                                      (图一)

 

27c8ee327c11a61f24ee2ce05e7cc719988.jpg

                                                                           (图二)

 

 

d4077e44231a7acf73043f8a9a2058efc86.jpg

                                     (图三)

 

第四步:

使用Smack客户端,编写java代码测试,并发送短信。

mvn配置如下:

    <dependency>
      <groupId>org.igniterealtime.smack</groupId>
      <artifactId>smack-core</artifactId>
      <version>4.3.4</version>
    </dependency>
    <dependency>
      <groupId>org.igniterealtime.smack</groupId>
      <artifactId>smack-extensions</artifactId>
      <version>4.3.4</version>
    </dependency>
    <dependency>
      <groupId>org.igniterealtime.smack</groupId>
      <artifactId>smack-tcp</artifactId>
      <version>4.3.4</version>
    </dependency>
    <dependency>
      <groupId>org.igniterealtime.smack</groupId>
      <artifactId>smack-java7</artifactId>
      <version>4.3.4</version>
    </dependency>

客户端登录openfire以及消息发送代码如下

package com.eddue;

import java.io.IOException;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.chat2.Chat;
import org.jivesoftware.smack.chat2.ChatManager;
import org.jivesoftware.smack.chat2.IncomingChatMessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.stringprep.XmppStringprepException;

public class Test {
    private static XMPPTCPConnectionConfiguration config;
    private static AbstractXMPPConnection conn;

    static {
        try {
            config = XMPPTCPConnectionConfiguration.builder()
                    .setXmppDomain("192.168.0.229")
                    .setHost("192.168.0.229")
                    .setPort(5222)
                    .setDebuggerFactory(SmackConfiguration.getDefaultSmackDebuggerFactory())
                    .setSecurityMode(SecurityMode.disabled)
                    .build();
            conn = new XMPPTCPConnection(config);
            conn.connect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void login(String username,String password){
        try {
            if(conn!=null){
                conn.login(username, password);
                System.out.println("user "+username+" login successfully.");
            }
        } catch (XMPPException e) {
            e.printStackTrace();
        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @SuppressWarnings("deprecation")
    public static void sendMessage(String username,String password,String msg){
        //先登录
        login(username, password);
        //再构建聊天室
        ChatManager cm = ChatManager.getInstanceFor(conn);
        cm.addIncomingListener(new IncomingChatMessageListener() {
            @Override
            public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
                System.out.println("message from : "+from+" : "+message.getBody());
            }
        });
        try {
            EntityBareJid jid = JidCreate.entityBareFrom("smack@192.168.0.229");
            Chat chat = cm.chatWith(jid);
            Message message = new Message();
            message.setBody(msg);
            chat.send(message);
            while (true){}
        } catch (XmppStringprepException e) {
            e.printStackTrace();
        } catch (NotConnectedException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    public static void main( String[] args ){
        sendMessage("openfire", "123456", "hello,smack 1111");
    }
}

 

第五步:

查看结果如下,表明测试成功

4cc68c14b652b220a1108abcf696cf1d158.jpg

转载于:https://my.oschina.net/u/1017791/blog/3082683

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值