找了一些demo,做了一些示例,演示了基于xmpp协议的openfire的客户端之间消息的发送。

代码需要两个包,smack.jar ,smackx.jar。

第一个代码,只是点对点发送消息的,不涉及广播。

  1. package com.test;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.InputStreamReader;
  5.  
  6. import org.jivesoftware.smack.Chat;
  7. import org.jivesoftware.smack.MessageListener;
  8. import org.jivesoftware.smack.XMPPConnection;
  9. import org.jivesoftware.smack.XMPPException;
  10. import org.jivesoftware.smack.packet.Message;
  11.  
  12. public class ChatTest {
  13.  
  14. public static void main(String[] args) throws XMPPException {
  15. // TODO Auto-generated method stub
  16. XMPPConnection.DEBUG_ENABLED=true;
  17. XMPPConnection connection=new XMPPConnection("127.0.0.1");
  18. connection.connect();
  19. connection.login("zhang", "12345");
  20. Chat chat=connection.getChatManager().createChat("liu@127.0.0.1", new MessageListener() {
  21.  
  22. @Override
  23. public void processMessage(Chat chat, Message message) {
  24. // TODO Auto-generated method stub
  25. System.out.println(message.getFrom()+" "+new java.util.Date().toString()+" say:"+message.getBody());
  26. }
  27. });
  28. BufferedReader cmdl=new BufferedReader(new InputStreamReader(System.in));
  29. for (; ; ) {
  30. try {
  31. String cmd=cmdl.readLine();
  32. if ("!q".equalsIgnoreCase(cmd)) {
  33. break;
  34. }
  35. chat.sendMessage(cmd);
  36. } catch (Exception e) {
  37. // TODO: handle exception
  38. e.printStackTrace();
  39. }
  40. }
  41. connection.disconnect();
  42. System.exit(0);
  43. }
  44. }

login方法里面的参数是当前要登录的账户,createchat方法中的,是聊天的对方的账号。运行时,liu在spark客户端登录,在本机的console就可以和liu交流了。

第二种涉及到广播,其实就一个方法。要使用广播功能,需要在openfire的服务器上安装一个广播的插件,不然是无法发送广播的。

  1. package com.test;
  2.  
  3. import java.util.Collection;
  4. import java.util.Scanner;
  5.  
  6. import org.jivesoftware.smack.Chat;
  7. import org.jivesoftware.smack.ChatManager;
  8. import org.jivesoftware.smack.MessageListener;
  9. import org.jivesoftware.smack.RosterEntry;
  10. import org.jivesoftware.smack.XMPPConnection;
  11. import org.jivesoftware.smack.XMPPException;
  12. import org.jivesoftware.smack.packet.Message;
  13.  
  14. public class IMTest {
  15.  
  16. public static void main(String[] args) {
  17. // TODO Auto-generated method stub
  18. XMPPConnection.DEBUG_ENABLED=true;
  19. XMPPConnection connection=null;
  20. try {
  21. IMTest test=new IMTest();
  22. connection=test.getConnection();
  23. test.doLogin(connection);
  24. test.getRoster(connection);
  25. //test.sendMessage(connection);
  26. test.sendPacket(connection);
  27. } catch (Exception e) {
  28. // TODO: handle exception
  29. e.printStackTrace();
  30. }finally{
  31. connection.disconnect();
  32. }
  33. }
  34.  
  35. private XMPPConnection getConnection() throws XMPPException{
  36. XMPPConnection con=new XMPPConnection("127.0.0.1");
  37. con.connect();
  38. return con;
  39. }
  40.  
  41. private void doLogin(XMPPConnection connection) throws XMPPException{
  42. connection.login("admin", "12345");
  43. System.out.println(connection.getUser()+" has logined");
  44. }
  45.  
  46. private Collection<RosterEntry> getRoster(XMPPConnection connection){
  47. Collection<RosterEntry> roster=connection.getRoster().getEntries();
  48. for(RosterEntry entry:roster){
  49. System.out.println("name :"+entry.getName()+",jid:"+entry.getUser());
  50. }
  51. return roster;
  52. }
  53.  
  54. private void sendMessage(XMPPConnection connection) throws XMPPException{
  55. ChatManager chatManager=connection.getChatManager();
  56. Chat chat=chatManager.createChat("liu@127.0.0.1", new MessageListener() {
  57. //获取对方消息
  58. @Override
  59. public void processMessage(Chat chat, Message message) {
  60. // TODO Auto-generated method stub
  61. System.out.println(message.getFrom()+" say: "+message.getBody());
  62. }
  63. });
  64. //发送消息
  65. Scanner inputScanner=new Scanner(System.in);
  66. while(true){
  67. String messageString=inputScanner.nextLine();
  68. System.out.println(connection.getUser()+" say:"+messageString);
  69. chat.sendMessage(messageString);
  70. }
  71. }
  72.  
  73. private void sendPacket(XMPPConnection connection){
  74. Message message=new Message();
  75. message.setTo("all@broadcast.127.0.0.1");
  76. message.setSubject("广播");
  77. message.setBody("推送信息");
  78. message.setType(Message.Type.normal);//离线支持
  79. connection.sendPacket(message);
  80. connection.disconnect();
  81. }
  82. }

发送广播的时候,setTo里面,@后面有broadcast标识,这个不能少。

不过目前广播消息,有时候会出现消息重复发送的情况。目前是打算采用上篇文章中所说的androidpn来做消息推送了,这里就没有再过多仔细研究。

openfire消息发送的更多相关文章

  1. 开源一个Java Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了

    开源一个Java Class实现Openfire登陆.推出.消息发送 N年前写的,希望对Openfire开发新手有帮助哦 import java.util.*; import java.io.*;   ...

  2. openfire自定义发送消息

    加入以下类: 这个是xml格式的,解析时可以将xml转成map,参数可自由定义 import org.jivesoftware.smack.packet.PacketExtension; /** * ...

  3. openfire消息通知推送

    package cn.zsmy.utils.openfire; import java.io.BufferedReader; import java.io.InputStreamReader; imp ...

  4. C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

    我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...

  5. [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作

    这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...

  6. Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能-转自阿里中间件

    引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...

  7. iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧

    1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...

  8. activemq安装与简单消息发送接收实例

    安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...

  9. eBay 消息发送(2)

      1.简介 Call Index Doc: http://developer.ebay.com/DevZone/XML/docs/Reference/eBay/index.html   消息发送主要 ...

随机推荐

  1. test5

    ## 前言 因为vs2010没有集成mvvmlight 所以想要使用mvvmlight的relaycomman需要引用dll 需要测试某个功能的时候,不能进行快带的集成 ## 引用mvvmlight ...

  2. 使用Maven部署构件至私服

    --------------------siwuxie095                                 使用 Maven 部署构件至私服         1.部署构件到 Nexu ...

  3. Python调shell

    os.system(cmd) 函数返回cmd的结束状态码,阻塞调用. os.popen(cmd) 函数返回cmd的标准输出,阻塞调用. (status, output) = commands.gets ...

  4. C++重载、重写(覆盖)、隐藏

    类成员函数中重载/重写(覆盖)/重定义(隐藏)的区别? 答:分别简单讲述一下函数重载,函数覆盖,函数隐藏的概念与特征: 函数重载:重载函数通常用来命名一组功能相似的函数 1.函数要在相同的类域 2.函 ...

  5. 利用python实现二分法和斐波那契序列

    利用python实现二分法:我的实现思路如下 1.判断要查找的值是否大于最大值,如果大于则直接返回False 2.判断要查找的值是否小于最小值,如果小于则直接返回False 3.如果要查找的值在最大值 ...

  6. collections之deque【双向队列】与Queue【单向队列】

    今天来向大家介绍两个队列,一个是deque,双向队列,另外一个是Queue,单向队列,队列和堆栈不同,队列为先进先出,大家还需要注意一下,双向队列为collections模块中的类,而Queue为qu ...

  7. C# 发送电子邮件(含附件)用到的类 system.web.mail

    主要是用到了System.Web.Mail命名空间,用到了此空间的三个类,分别是: ●MailMessage类,用于构造电子邮件●MailAttachment类,用于构造电子邮件附件●SmtpMail ...

  8. 13-前端不通路径同一个请求访问同一个页面时,有时样式没有加载出来(jss,image,css)

    通过如下方式访问同一个网站时,下面一个可以加载样式,而下面一个加载的页面却没有样式,思考良久没有想通,当时也忘记了用浏览器看下 css,js,image的请求路径,其实在前端页面里面我直接:  这样引 ...

  9. 13.11.20 jquery 核心 siblings() 获得同类(不包含自己)循环所有,

    jquery 核心1.选择器,2. 创建dom 元素 3. jquery 执行时 4. 延迟执行 5. 循环 6. 计算长度.7.8 获得选择器和所在节点 9. 获得下标 10. 元素存放数据  11 ...

  10. 2018.09.01 poj2689 Prime Distance(埃式筛法)

    传送门 一道挺有趣的. 第一眼以为每个数都用miller_rabin判一次,但感觉会被卡时间啊. 继续分析发现可以晒出sqrt(r)中的所有素数,然后用类似埃式筛法的方法晒出[l,r]" r ...