找了一些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消息发送的更多相关文章

  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. Java对称与非对称加密解密,AES与RSA

    加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么 ...

  2. grep匹配字符串出现的次数

    背景:想要匹配一个html页面中某个字符出现的次数   遇到的问题: 用grep -c “xxx字符”得到的是行数,如果一行中有多个匹配到的字符,只会算作一个       解决方法: 使用grep - ...

  3. BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource

    Tomcat报错如下: BeanDefinitionStoreException: IOException parsing XML document from ServletContext resou ...

  4. nyoj1076-方案数量 【排列组合 dp】

    http://acm.nyist.net/JudgeOnline/problem.php?pid=1076 方案数量 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 ...

  5. obstacle

    obstacle - 必应词典 美[ˈɑbstək(ə)l]英[ˈɒbstək(ə)l] n.障碍:障碍物:阻碍:绊脚石 网络妨碍:干扰:妨害

  6. Docker commit 制作weblogic镜像

    第一:前提条件 1.本机必须已经安装了docker 容器 2.pull 一个基础的镜像  如图:rastasheep/ubuntu-sshd 第二:利用docker commit  命令 将容器的状态 ...

  7. ROS Learning-008 beginner_Tutorials ROS话题

    ROS Indigo beginner_Tutorials-07 ROS话题 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...

  8. LayDate 时间选择插件的使用介绍 (低版本1.0好像是)

    <span style="font-size:18px;"><!doctype html> <html> <head> <me ...

  9. dumpbin 查看dll中的导出函数

    C:\Program Files (x86)\Microsoft Visual Studio 14.0>dumpbin -exports E:\20171110\Release\aa.dll h ...

  10. WinScp获取一个文件

    CD /d C:\Program Files (x86)\WinSCPWinSCP.exe /console /command "option batch continue" &q ...