openfire+smack4.2.3
https://blog.csdn.net/qq_36020545/article/details/80802300
在学习openfire中

其中openfire向我们这种初学者最好不要更改底层代码和进行增加自己的插件,在刚开始学习的过程中可以下了解 xmpp协议

我这边使用java实现smack 和openfire 的联动,再和spark进行联调沟通.

我在这里使用的linux的openfire环境,配置的端口都是默认的

使用的是mysql数据库不过在我们写客户端或者api 接口的时候是不用连接openfire数据库的,所以我们服务器在写业务服务器的时候可以在链接自己的数据库,我们和openfire沟通的时候是按照xmpp协议

这个是smack的使用api英文版 生肉啊

http://download.igniterealtime.org/smack/docs/latest/javadoc/index.html?overview-summary.html

这个是openfire官网

http://www.igniterealtime.org/downloads/index.jsp

下面直接上代码

这个是smackUtil 使用smack4.2.3package com.tsingning.im.smack;import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.chat2.Chat;
import org.jivesoftware.smack.chat2.ChatManager;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import org.jivesoftware.smackx.iqregister.AccountManager;
import org.jivesoftware.smackx.muc.MucEnterConfiguration;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.muc.MultiUserChatManager;
import org.jivesoftware.smackx.xdata.Form;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.jid.parts.Localpart;
import org.jxmpp.jid.parts.Resourcepart;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;@Component
public class SmackUtil {/**openfire admin 账号*/@Value("openfire.admin.username")private static String ADMIN_USERNAME;/**openfire admin 密码*/@Value("openfire.admin.password")private static String ADMIN_PASSWORD;/**openfire system 账号*/@Value("openfire.system.username")private static String SYSTEM_USERNAME;/**openfire system 密码*/@Value("openfire.system.password")private static String SYSTEM_PASSWORD;/**openfire 域*/@Value("openfire.domain")private static String OPENFIRE_DOMAIN;/**openfire ip*/@Value("openfire.host")private static String OPENFIRE_HOST;/**openfire ip*/@Value("openfire.port")private static int OPENFIRE_PORT;public static GroupMessageListener groupMessageListener = new GroupMessageListener();public static InChatMessageListener inChatMessageListener  = new InChatMessageListener();private static AbstractXMPPConnection adminConnection = null;public static AbstractXMPPConnection getAdminConnection(){if(adminConnection == null){synchronized (SmackUtil.class){if(adminConnection == null){try {adminConnection = getUserConnection(ADMIN_USERNAME,ADMIN_PASSWORD);adminConnection.connect();adminConnection.login();} catch (Exception e) {e.printStackTrace();}}}}return adminConnection;}private static AbstractXMPPConnection systemConnection = null;public static AbstractXMPPConnection getSystemConnection(){if(systemConnection == null){synchronized (SmackUtil.class){if(systemConnection == null){try {systemConnection = getUserConnection(SYSTEM_USERNAME,SYSTEM_PASSWORD);systemConnection.connect();systemConnection.login();} catch (Exception e) {e.printStackTrace();}}}}return systemConnection;}/*** 用户登录链接通道* @return*/public static AbstractXMPPConnection getUserConnection(String username, String password) throws Exception {XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();builder.setUsernameAndPassword(username,password);builder.setXmppDomain(OPENFIRE_DOMAIN);builder.setHost(OPENFIRE_HOST);builder.setPort(OPENFIRE_PORT);builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);builder.setDebuggerEnabled(true);XMPPTCPConnectionConfiguration config = builder.build();AbstractXMPPConnection c = new XMPPTCPConnection(config);return c;}/*** 注册用户* @param username 用户登录账号* @param password 用户登录密码*/public static boolean resgisterUser(String username,String password) throws Exception {try{//附加信息HashMap<String, String> attributes =new HashMap<String, String>();attributes.put("name",username);AccountManager.sensitiveOperationOverInsecureConnectionDefault(true);Localpart usernameL = Localpart.from(username);AccountManager.getInstance(getAdminConnection()).createAccount(usernameL,password,attributes);return true;}catch (Exception e){return false;}}/*** 发消息* @param type 消息类型* @param subject 消息头* @param user 目标* @param body 消息* @throws Exception*/public static void sendUserMsg(Message.Type type, String subject, String user, String body) throws Exception {ChatManager chatManager = ChatManager.getInstanceFor(getAdminConnection());// chatManager.addIncomingListener(inChatMessageListener);EntityBareJid groupJid = JidCreate.entityBareFrom(user);Chat chat = chatManager.chatWith(groupJid);Message msg = new Message();msg.setType(type);msg.setSubject(subject);msg.setBody(body);chat.send(msg);}/*** 创建群聊房间* @param groupname 群名称* @param roomname 群昵称* @param usernames 群的所有人* @return* @throws Exception*/public static MultiUserChat createChatRoom(String usernmae, String passowrd, String groupname, String roomname, List<String> usernames) throws Exception {String jid = groupname + "@conference." + getSystemConnection().getServiceName();EntityBareJid groupJid = JidCreate.entityBareFrom(jid);MultiUserChat muc = MultiUserChatManager.getInstanceFor(getSystemConnection()).getMultiUserChat(groupJid);//设置群组名称muc.create(Resourcepart.from(roomname));// 设置聊天室的成员List<String> owners = new ArrayList<String>();owners.add(getSystemConnection().getUser()+"");/**XMPP会议室设置MUC*/// 获得聊天室的配置表单 根据原始表单创建一个要提交的新表单。Form form = muc.getConfigurationForm();Form submitForm = form.createAnswerForm();//房间名称submitForm.setAnswer("muc#roomconfig_roomname",roomname);//房间描述submitForm.setAnswer("muc#roomconfig_roomdesc","家庭圈");
//        //房间拥有者submitForm.setAnswer("muc#roomconfig_roomowners", owners);//房间管理员final List<String> admins = new ArrayList<String>();admins.add(getAdminConnection().getUser()+"");submitForm.setAnswer("muc#roomconfig_roomadmins", admins);//房间最大人数final List<String> maxusers = new ArrayList<String>();maxusers.add("50");submitForm.setAnswer("muc#roomconfig_maxusers", maxusers);//设置为公共房间submitForm.setAnswer("muc#roomconfig_publicroom", true);// 设置聊天室是持久聊天室submitForm.setAnswer("muc#roomconfig_persistentroom", true);//房间是适度的submitForm.setAnswer("muc#roomconfig_moderatedroom",true);// 房间仅对成员开放submitForm.setAnswer("muc#roomconfig_membersonly", false);// 允许占有者邀请其他人submitForm.setAnswer("muc#roomconfig_allowinvites", true);//允许占有者更改主题submitForm.setAnswer("muc#roomconfig_changesubject", false);// 登录房间对话submitForm.setAnswer("muc#roomconfig_enablelogging", true);//进入不需要密码submitForm.setAnswer("muc#roomconfig_passwordprotectedroom",  false);// 仅允许注册的昵称登录submitForm.setAnswer("x-muc#roomconfig_reservednick", true);// 允许使用者修改昵称submitForm.setAnswer("x-muc#roomconfig_canchangenick", false);// 允许用户注册房间submitForm.setAnswer("x-muc#roomconfig_registration", true);// 发送已完成的表单(有默认值)到服务器来配置聊天室muc.sendConfigurationForm(submitForm);//添加群消息监听muc.addMessageListener(groupMessageListener);return muc;}/*** 加入群聊会议室* @param groupName 聊天室名称* @return* @throws Exception*/public static MultiUserChat joinMultiUserChat(String groupName,String nickname) throws Exception {//群jidString jid = groupName + "@conference." +  getSystemConnection().getServiceName();//jid实体创建EntityBareJid groupJid = JidCreate.entityBareFrom(jid);//获取群管理对象MultiUserChatManager multiUserChatManager = MultiUserChatManager.getInstanceFor( getSystemConnection());//通过群管理对象获取该群房间对象MultiUserChat multiUserChat = multiUserChatManager.getMultiUserChat(groupJid);Resourcepart from = Resourcepart.from(nickname);MucEnterConfiguration.Builder builder = multiUserChat.getEnterConfigurationBuilder(from);builder.requestMaxCharsHistory(0);MucEnterConfiguration mucEnterConfiguration = builder.build();// 加入群multiUserChat.join(mucEnterConfiguration);return multiUserChat;}/*** 发送群聊消息* @param groupName* @param body*/public static void sendChatGroupMessage(String groupName, String body) throws Exception {MultiUserChat multiUserChat = joinMultiUserChat(groupName, getSystemConnection().getUser().toString());Message message = new Message();message.setBody(body);message.setType(Message.Type.groupchat);//发送信息multiUserChat.sendMessage(message);//下线multiUserChat.leave();}}

在这里我增加了两个监听文件

这个是消息监听

package com.tsingning.im.smack;import org.jivesoftware.smack.chat2.Chat;
import org.jivesoftware.smack.chat2.IncomingChatMessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jxmpp.jid.EntityBareJid;/*** 接收消息监听器 * Created by ozy on 2017/4/11. */
public class InChatMessageListener implements IncomingChatMessageListener {@Override  public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {//from就是消息的发送方的jid,message即发送的消息对象,chat也就是单聊对象  //获取from发送方的账号,转换成string即可System.out.println("发信人:" +from.toString()+",body:"+message.getBody());}
}  

这个是群聊监听

package com.tsingning.im.smack;import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jxmpp.jid.Jid;public class GroupMessageListener implements MessageListener {@Overridepublic void processMessage(Message message) {Jid from = message.getFrom();String body = message.getBody();System.out.println("jid:"+from+",body:"+body);}
}

下面是pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>open-fire-demo</groupId><artifactId>open-fire-demo</artifactId><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>6</source><target>6</target></configuration></plugin></plugins></build><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><smack.version>4.2.3</smack.version></properties><dependencies><dependency><groupId>org.igniterealtime.smack</groupId><artifactId>smack-core</artifactId><version>${smack.version}</version></dependency><dependency><groupId>org.igniterealtime.smack</groupId><artifactId>smack-java7</artifactId><version>${smack.version}</version><exclusions><exclusion><groupId>xpp3</groupId><artifactId>xpp3</artifactId></exclusion></exclusions></dependency><dependency><groupId>xpp3</groupId><artifactId>xpp3</artifactId><version>1.1.3.4.O</version></dependency><dependency><groupId>org.igniterealtime.smack</groupId><artifactId>smack-tcp</artifactId><version>${smack.version}</version></dependency><dependency><groupId>org.igniterealtime.smack</groupId><artifactId>smack-im</artifactId><version>${smack.version}</version></dependency><dependency><groupId>org.igniterealtime.smack</groupId><artifactId>smack-extensions</artifactId><version>${smack.version}</version></dependency><dependency><groupId>org.jxmpp</groupId><artifactId>jxmpp-jid</artifactId><version>0.6.0</version></dependency></dependencies></project>

openfire+smack4.2.3相关推荐

  1. smack+openfire实现Android实时通信(实现大部分基本功能)

    1. 开发环境 smack-4.3.4 openfire-4.6.3 开发工具:AndroidStudio openfire下载及安装: 官网:https://igniterealtime.org/p ...

  2. android下的XMPP对应smack-4.2.1,实现登录,注册,发单聊,加聊天室,发群聊等简单功能

    1.API地址:点击打开链接 2.openfire,spark下载:点击打开链接 3.效果图 4.引用的JAR: compile files('libs/fscontext.jar') compile ...

  3. java smack 例子_关于JAVA利用smack连接openfire的jar依赖问题

    一.GitHub上的maven依赖 直接使用maven依赖 二.关于smack-4.3.4的jar包相关依赖 有两种方式 ①.引入maven依赖,比4.2.0版本多了一项 ②.可以在https://w ...

  4. 技巧积累--Smack、Spark、Openfire

    研究的并不深入,只是记录下易出的错误以及解决办法 1.spark源码运行出错,如下 java.lang.reflect.InvocationTargetException at sun.reflect ...

  5. Openfire加Smack实现IM

    1.服务器配置 我买了一台华为虚拟主机,系统是Linux,并购买了域名,网站也备案了,域名为:android666.cn. 然后在这台虚拟主机上安装Openfire,安装教程可参考:https://b ...

  6. smack4.3.4

    最近项目需要,在Javaweb项目中使用smack4.3.4作为xmpp的客户端,连接openfire服务端.过程中遇到许多问题,资料较少,特意整理出来. 一.连接服务器+登录 XMPPTCPConn ...

  7. openfire html5,XMPP,Smack,Openfire 异常、问题总结

    1.Smack 4.2.3,入群时老是报无响应,还未找到缘由(源码问题),已找到缘由,openfire4.2.0+版本自身bug,不支持用户110状态html Exception=org.jiveso ...

  8. tigase客户端之smack4.3用法【草稿】

    项目介绍 sureim 项目地址: sureim项目地址 git clone https://git.tigase.tech/sureim.git demo网站: tigase im spark 源码 ...

  9. Openfire XMPP Smack RTC IM 即时通讯 聊天 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

最新文章

  1. python 用途-python主要用途
  2. mac电脑开机出现客人用户,没有输入密码框,其他键都点不动,重启也不好使
  3. QT5实现简单的TCP通信
  4. 按钮添加边框和边框色
  5. 设置域名_详解在nginx中设置三级域名的方法示例
  6. 45页的NAS神经网络搜索的综述,请查收!
  7. STS安装lombok
  8. leader选举的源码分析-startLeaderElection
  9. java代码隐藏面消除算法,java常面的几种排序算法
  10. 2020胡润慈善榜揭晓:许家印以28亿元捐赠额成为中国首善
  11. zabbix错误提示解决
  12. ubuntu16.04安装FastDFS-5.08
  13. BAT及各大互联网公司前端笔试面试题--Html,Css篇
  14. spark sortBy sortByKey实战详解
  15. Python微信、QQ自动发消息
  16. python调用QT界面使用方法
  17. AD7705驱动代码 -- Linux SPI设备驱动
  18. 简单爬取京东商品名称、价格(仅供学习)
  19. 15_Python3.6+selenium2.53.6自动化测试_登录126邮箱
  20. 国开本科计算机应用基础操作题,新版国家开放大学中央电大本科计算机应用基础操作题题库...

热门文章

  1. pythonQQ机器人系列:使用requests实现QQ机器人聊天(1-0)
  2. liferay监听器
  3. 最优化方法之黄金分割法,为什么是0.618?
  4. awk从入门到入土(19)awk扩展插件,让awk如虎添翼
  5. Sedawk笔记之awk篇
  6. Java线程池(超详细)
  7. antd3.x版本table使用fixed错位问题修复
  8. 贴图教程_次世代游戏基础教程-maya烘焙AO贴图
  9. Linux下Graphite的安装及部署
  10. 如何在 Linux 中使用 Calibre 将 PDF 文件转换为 EPUB 格式?