openfire消息发送
找了一些demo,做了一些示例,演示了基于xmpp协议的openfire的客户端之间消息的发送。
代码需要两个包,smack.jar ,smackx.jar。
第一个代码,只是点对点发送消息的,不涉及广播。
package com.test; import java.io.BufferedReader;
import java.io.InputStreamReader; import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message; public class ChatTest { public static void main(String[] args) throws XMPPException {
// TODO Auto-generated method stub
XMPPConnection.DEBUG_ENABLED=true;
XMPPConnection connection=new XMPPConnection("127.0.0.1");
connection.connect();
connection.login("zhang", "12345");
Chat chat=connection.getChatManager().createChat("liu@127.0.0.1", new MessageListener() { @Override
public void processMessage(Chat chat, Message message) {
// TODO Auto-generated method stub
System.out.println(message.getFrom()+" "+new java.util.Date().toString()+" say:"+message.getBody());
}
});
BufferedReader cmdl=new BufferedReader(new InputStreamReader(System.in));
for (; ; ) {
try {
String cmd=cmdl.readLine();
if ("!q".equalsIgnoreCase(cmd)) {
break;
}
chat.sendMessage(cmd);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
connection.disconnect();
System.exit(0);
}
}
login方法里面的参数是当前要登录的账户,createchat方法中的,是聊天的对方的账号。运行时,liu在spark客户端登录,在本机的console就可以和liu交流了。
第二种涉及到广播,其实就一个方法。要使用广播功能,需要在openfire的服务器上安装一个广播的插件,不然是无法发送广播的。
package com.test; import java.util.Collection;
import java.util.Scanner; import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message; public class IMTest { public static void main(String[] args) {
// TODO Auto-generated method stub
XMPPConnection.DEBUG_ENABLED=true;
XMPPConnection connection=null;
try {
IMTest test=new IMTest();
connection=test.getConnection();
test.doLogin(connection);
test.getRoster(connection);
//test.sendMessage(connection);
test.sendPacket(connection);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
connection.disconnect();
}
} private XMPPConnection getConnection() throws XMPPException{
XMPPConnection con=new XMPPConnection("127.0.0.1");
con.connect();
return con;
} private void doLogin(XMPPConnection connection) throws XMPPException{
connection.login("admin", "12345");
System.out.println(connection.getUser()+" has logined");
} private Collection<RosterEntry> getRoster(XMPPConnection connection){
Collection<RosterEntry> roster=connection.getRoster().getEntries();
for(RosterEntry entry:roster){
System.out.println("name :"+entry.getName()+",jid:"+entry.getUser());
}
return roster;
} private void sendMessage(XMPPConnection connection) throws XMPPException{
ChatManager chatManager=connection.getChatManager();
Chat chat=chatManager.createChat("liu@127.0.0.1", new MessageListener() {
//获取对方消息
@Override
public void processMessage(Chat chat, Message message) {
// TODO Auto-generated method stub
System.out.println(message.getFrom()+" say: "+message.getBody());
}
});
//发送消息
Scanner inputScanner=new Scanner(System.in);
while(true){
String messageString=inputScanner.nextLine();
System.out.println(connection.getUser()+" say:"+messageString);
chat.sendMessage(messageString);
}
} private void sendPacket(XMPPConnection connection){
Message message=new Message();
message.setTo("all@broadcast.127.0.0.1");
message.setSubject("广播");
message.setBody("推送信息");
message.setType(Message.Type.normal);//离线支持
connection.sendPacket(message);
connection.disconnect();
}
}
发送广播的时候,setTo里面,@后面有broadcast标识,这个不能少。
不过目前广播消息,有时候会出现消息重复发送的情况。目前是打算采用上篇文章中所说的androidpn来做消息推送了,这里就没有再过多仔细研究。
openfire消息发送的更多相关文章
- 开源一个Java Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了
开源一个Java Class实现Openfire登陆.推出.消息发送 N年前写的,希望对Openfire开发新手有帮助哦 import java.util.*; import java.io.*; ...
- openfire自定义发送消息
加入以下类: 这个是xml格式的,解析时可以将xml转成map,参数可自由定义 import org.jivesoftware.smack.packet.PacketExtension; /** * ...
- openfire消息通知推送
package cn.zsmy.utils.openfire; import java.io.BufferedReader; import java.io.InputStreamReader; imp ...
- C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)
我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...
- [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作
这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...
- Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能-转自阿里中间件
引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...
- iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧
1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...
- activemq安装与简单消息发送接收实例
安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...
- eBay 消息发送(2)
1.简介 Call Index Doc: http://developer.ebay.com/DevZone/XML/docs/Reference/eBay/index.html 消息发送主要 ...
随机推荐
- global statement
[global statement] 在线程里,默认所有变量都是本线程局部变量,要想访问全局变量,则要先用global声明. 如全局有变量totalCount,线程中有语句 totalCount += ...
- redis安装和命令使用
前言: redis是一个key-value的存储系统,value支持string.list.set.zset.hash五种类型,且支持数据的本地存储 一.安装redis 前提:linux下需要安装 ...
- 慕课网access_token的获取
access_token的接口是微信公众号一个基础接口,access_token接口微信公众号一个非常重要的接口 access_token是微信公众号的全局唯一票据,公众号的所有接口的调用都需要使用到 ...
- 在Eclipse中配置Maven插件
--------------------------siwuxie095 在 Eclipse 中配置 Maven 插件 ...
- Oracle的下载、安装和配置
win10下Oracle的下载.安装和配置 --------------siwuxie095 1.首先到Oracle官网下载Oracle,中文版官网,传送阵:点 ...
- 初学Hadoop之图解MapReduce与WordCount示例分析
Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS) ...
- Spring框架的事务管理之基于AspectJ的注解方式(重点掌握,最简单的方式)
1. 步骤一:恢复转账的开发环境(具体开发环境实现见:https://www.cnblogs.com/wyhluckdog/p/10137283.html)2. 步骤二:applicationCont ...
- snowflake自增ID算法 (PHP版)
/** * SnowFlake ID Generator * Based on Twitter Snowflake to generate unique ID across multiple * da ...
- [z]kafka相关资料
http://my.oschina.net/ielts0909/blog/93190 http://www.iteye.com/magazines/107 http://blog.csdn.net/h ...
- jstl标签详解 (转载)
JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一定要扎实. JSTL ...