Java 通过smack + openfire + spark实现简单的登录与发送消息

1.安装好openfire(教程:http://blog.csdn.net/hometing218/article/details/79570747)

2.下载个Spark

3.通过openfire注册好两个用户

4.登录spark后将刚注册好的两用户互相添加好友

5.登录代码如下:

package com.song.controller;

import org.apache.commons.lang.StringUtils;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.chat.Chat;
import org.jivesoftware.smack.chat.ChatManager;
import org.jivesoftware.smack.chat.ChatManagerListener;
import org.jivesoftware.smack.chat.ChatMessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;

/**
 * Created by huang(jy) on 2018/3/20.
 */
public class SmackClict {

    public static void main(String[] args) {
        try {
            String serviceName = "192.168.20.125";        //openfire服务器名称
            String host = "192.168.20.125";                        //openfire服务器地址
            int port = 5222;                                            // 客户端到服务器,默认5222
            String myUsername = "zyy";                    //帐号
            String myPassword = "123456";                //密码
            String friendUsername = "huang";            //要发消息的对象名称
            XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
            builder.setUsernameAndPassword(myUsername, myPassword);
            builder.setServiceName(serviceName);
            builder.setHost(host);
            builder.setPort(port);
            builder.setSecurityMode(SecurityMode.disabled);
            builder.setDebuggerEnabled(false);
            XMPPTCPConnectionConfiguration config = builder.build();
            AbstractXMPPConnection c = new XMPPTCPConnection(config);
            c.connect();
            c.login();
            System.out.println("Authenticated = " + c.isAuthenticated());
            ChatManager chatmanager = ChatManager.getInstanceFor(c);
            Chat newChat = chatmanager.createChat(friendUsername + "@" + serviceName);
            final ChatMessageListener messageListener = new ChatMessageListener() {
                @Override
                public void processMessage(Chat arg0, Message message) {
                    String messageBody = message.getBody();
                    if (StringUtils.isNotBlank(messageBody)) {
                        try {
                            arg0.sendMessage("你刚说的是:" + messageBody);
                        } catch (Exception e) {
                        }
                    }
                }
            };
            ChatManagerListener chatManagerListener = new ChatManagerListener() {
                @Override
                public void chatCreated(Chat chat, boolean arg1) {
                    chat.addMessageListener(messageListener);
                }
            };
            chatmanager.addChatListener(chatManagerListener);
            try {
                newChat.sendMessage("我来咯");
            } catch (Exception e) {
                System.out.println("Error Delivering block");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

刚开始的时候在c.login()处一直报空指针的错,后来查证后是因为少引了个jar,引用jar如下

<dependency>
    <groupId>org.igniterealtime.smack</groupId><!--login时报空指针错就是因为没引这个jar-->
    <artifactId>smack-java7</artifactId>        
    <version>4.1.8</version>
</dependency>

<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-tcp</artifactId>
    <version>4.1.8</version>
</dependency>
<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-im</artifactId>
    <version>4.1.8</version>
</dependency>

最后,通过spark登录其中一个帐号,代码登录另一个帐号给spark帐号发送消息(直接运行main函数),消息发送成功


如有转载请请务必保留此出处:http://blog.csdn.net/hometing218/article/details/79635455

猜你喜欢

转载自blog.csdn.net/hometing218/article/details/79635455
今日推荐