openfire 小试一刀

openfire安装:

  • OpenFire是基于XMPP协议的纯java实现的服务器,Google Talk就用的它。
  • 环境: linux, jdk5 or later, 数据库(这里以mysql为主,有一数据库openfire)。

下载一份linux包,解压之:

tar -zxvf openfire_3_9_1.tar.gz

会有以下目录:

bin //执行文件目录,如openfire
conf //配置文件目录
documentation //文档目录
lib //依赖jar包目录
logs //日志目录
plugins //插件目录,默认有一个web管理控制台
resources //资源目录, 如resources/database放置数据库建立sql文件,resources/security放置密钥(SSL)
  • 启动openfire
bin/openfire start

支持命令: bin/openfire start|stop|status
  • openfire初始化

      1. 进入web控制台: ${openfire_server}:9090。

      2. 语言选择。

      3. 配置端口(默认)。

      4. 选择数据库: 这里以MySql为例。

      5. 用户及用户组: 也以数据库管理。

      6. 填写数据库连接信息,数据库用域名(不要用IP)。

      7. 设置一个用户。

之后登录,你应该能看到如下界面:

OpenFire配置:

  • 进入管理平台创建用户testuser1, testuser2:

  • 下载Spark,安装,登录。

  

用户也可以使用Spark客户端自己注册用户:

你可以在web管理控制台配置用户注册:

java操作实现

  • 加入依赖包:smack.jar, smackx.jar

用spark登录用户testuser2:

运行下面的程序:

public class XmppManager {

	private static final int packetReplyTimeout = 500; // millis

	private String server;
	private int port;

	private ConnectionConfiguration config;
	private XMPPConnection connection;

	private ChatManager chatManager;
	private MessageListener messageListener;

	public XmppManager(String server, int port) {
		this.server = server;
		this.port = port;
	}

	public void init() throws XMPPException {

		System.out.println(String.format(
				"Initializing connection to server %1$s port %2$d", server,
				port));

		SmackConfiguration.setPacketReplyTimeout(packetReplyTimeout);

		config = new ConnectionConfiguration(server, port);
		config.setSASLAuthenticationEnabled(false);
		config.setSecurityMode(SecurityMode.disabled);

		connection = new XMPPConnection(config);
		connection.connect();

		System.out.println("Connected: " + connection.isConnected());

		chatManager = connection.getChatManager();
		messageListener = new MyMessageListener();

	}

	public void performLogin(String username, String password)
			throws XMPPException {
		if (connection != null && connection.isConnected()) {
			connection.login(username, password);
		}
	}

	public void setStatus(boolean available, String status) {

		Presence.Type type = available ? Type.available : Type.unavailable;
		Presence presence = new Presence(type);

		presence.setStatus(status);
		connection.sendPacket(presence);

	}

	public void destroy() {
		if (connection != null && connection.isConnected()) {
			connection.disconnect();
		}
	}

	public void sendMessage(String message, String buddyJID)
			throws XMPPException {
		System.out.println(String.format("Sending mesage '%1$s' to user %2$s",
				message, buddyJID));
		Chat chat = chatManager.createChat(buddyJID, messageListener);
		chat.sendMessage(message);
	}

	public void createEntry(String user, String name) throws Exception {
		System.out.println(String.format(
				"Creating entry for buddy '%1$s' with name %2$s", user, name));
		Roster roster = connection.getRoster();
		roster.createEntry(user, name, null);
	}

	class MyMessageListener implements MessageListener {

		@Override
		public void processMessage(Chat chat, Message message) {
			String from = message.getFrom();
			String body = message.getBody();
			System.out.println(String.format(
					"Received message '%1$s' from %2$s", body, from));
		}
	}
}

测试用例:

public static void main(String[] args) throws Exception {
	String username = "testuser1";
	String password = "testuser1";

	XmppManager xmppManager = new XmppManager("openfire", 5222);
	xmppManager.init();
	xmppManager.performLogin(username, password);
	xmppManager.setStatus(true, "Hello everyone");
		
	String buddyJID = "testuser2";
	String buddyName = "testuser2";
	xmppManager.createEntry(buddyJID, buddyName);
	xmppManager.sendMessage("Hi, 来自java客户端。", "testuser2@openfire");
	boolean isRunning = true;

	while (isRunning) {
		Thread.sleep(50);
	}
	xmppManager.destroy();
}
于是在testuser2的spark上,你就能看到消息:

具体openfire的其他配置,可以见其document下的指南,smack使用自己再去挖掘吧。

不吝指正。

转载于:https://my.oschina.net/indestiny/blog/215471

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值