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 消息发送主要 ...
随机推荐
- test5
## 前言 因为vs2010没有集成mvvmlight 所以想要使用mvvmlight的relaycomman需要引用dll 需要测试某个功能的时候,不能进行快带的集成 ## 引用mvvmlight ...
- 使用Maven部署构件至私服
--------------------siwuxie095 使用 Maven 部署构件至私服 1.部署构件到 Nexu ...
- Python调shell
os.system(cmd) 函数返回cmd的结束状态码,阻塞调用. os.popen(cmd) 函数返回cmd的标准输出,阻塞调用. (status, output) = commands.gets ...
- C++重载、重写(覆盖)、隐藏
类成员函数中重载/重写(覆盖)/重定义(隐藏)的区别? 答:分别简单讲述一下函数重载,函数覆盖,函数隐藏的概念与特征: 函数重载:重载函数通常用来命名一组功能相似的函数 1.函数要在相同的类域 2.函 ...
- 利用python实现二分法和斐波那契序列
利用python实现二分法:我的实现思路如下 1.判断要查找的值是否大于最大值,如果大于则直接返回False 2.判断要查找的值是否小于最小值,如果小于则直接返回False 3.如果要查找的值在最大值 ...
- collections之deque【双向队列】与Queue【单向队列】
今天来向大家介绍两个队列,一个是deque,双向队列,另外一个是Queue,单向队列,队列和堆栈不同,队列为先进先出,大家还需要注意一下,双向队列为collections模块中的类,而Queue为qu ...
- C# 发送电子邮件(含附件)用到的类 system.web.mail
主要是用到了System.Web.Mail命名空间,用到了此空间的三个类,分别是: ●MailMessage类,用于构造电子邮件●MailAttachment类,用于构造电子邮件附件●SmtpMail ...
- 13-前端不通路径同一个请求访问同一个页面时,有时样式没有加载出来(jss,image,css)
通过如下方式访问同一个网站时,下面一个可以加载样式,而下面一个加载的页面却没有样式,思考良久没有想通,当时也忘记了用浏览器看下 css,js,image的请求路径,其实在前端页面里面我直接: 这样引 ...
- 13.11.20 jquery 核心 siblings() 获得同类(不包含自己)循环所有,
jquery 核心1.选择器,2. 创建dom 元素 3. jquery 执行时 4. 延迟执行 5. 循环 6. 计算长度.7.8 获得选择器和所在节点 9. 获得下标 10. 元素存放数据 11 ...
- 2018.09.01 poj2689 Prime Distance(埃式筛法)
传送门 一道挺有趣的. 第一眼以为每个数都用miller_rabin判一次,但感觉会被卡时间啊. 继续分析发现可以晒出sqrt(r)中的所有素数,然后用类似埃式筛法的方法晒出[l,r]" r ...