XMPP客户端库Smack 4.0.6版开发之五

XMPP客户端库Smack 4.0.6版开发之五

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

四、使用Chat消息通信

来回收发消息是即时通信的核心功能。尽管单条消息是以包的形式发送和接收的,通常还是把他视为聊天的消息字符串,使用org.jivesoftware.smack.Chat类。

1、Chat类

一个聊天Chat会在两个用户之间创建一个消息线程(通过线程ID)。下面的代码片段演示了怎样创建一个新聊天,然后向用户发送一条文本消息:

//假设已经创建了一个名为"connection"的XMPPConnection

ChatManagerchatmanager = connection.getChatManager();

ChatnewChat = chatmanager.createChat("[email protected]", newMessageListener(){

public void processMessage(Chat chat,Message message){

System.out.println(“Receivedmessage: “+ message);

}

});

try{

newChat.sendMessage(“Howdy!”);

}catch(XMPPExceptione){

System.out.println(“Error Deliveringblock”);

}

Chat.sendMessage(String)方法可以方便地创建一个消息Message对象,用字符串参数设置消息正文Body,然后发送消息。在某些情况下你可能希望在发送消息前设置额外的值,使用Chat.createMessage()方法和Chat.sendMessage(Message)方法,如下面的代码片段所示:

MessagenewMessage = new Message();

newMessage.setBody(“Howdy!”);

message.setProperty(“favoriteColor”,“red”);

newChat.sendMessage(newMessage);

前面的例子中,我们可以注意到,在创建聊天Chat时指定了一个消息监听器MessageListener,在任意时刻,当来自其它用户的聊天消息到达后,消息监听器会得到通知。下面的代码片段使用了监听器做鹦鹉学舌,它会回显来自其他用户传递的消息。

//假设在聊天Chat中已经设置了消息监听器MessageListener

publicvoid processMessage(Chat chat, Message message){

// 把用户发送的消息内容发送给用户

chat.sendMessage(message.getBody());

}

2、来电聊天

当提示有另一个用户的聊天消息到了后,设置有轻微的不同,因为你是首次接收到聊天消息。取代明确地创建一个Chat来发送消息,当ChatManager创建了Chat实例后,你需要注册处理新创建的Chat实例。ChatManager会通过线程ID找到匹配的Chat,如果Chat不存在,那么它会创建一个新Chat对象来匹配。要得到这个新Chat,你必须注册来得到通知。可以注册一个消息监听器来接收所有要到来的消息。

//假定已经创建了名为”connection”的XMPPConnection

ChatManagercm = connection.getChatManager().addChatListener(new ChatManagerListener(){

@Override

public void chatCreated(Chat chat, BooleancreatedLocally){

if(!createdLocally)

chat.addMessageListener(newMyNewMessageListener());

}

});

除了基于线程的Chat消息,也有一些客户端不发送线程ID作为Chat的一部分。要处理这种情况,Smack会基于JID尝试匹配接收的消息到最匹配现有的Chat。它会尝试用完整的JID来查找Chat,如果搜不到,再尝试用基本的JID来查找Chat。如果找不到现有的Chat来匹配,那么会创建一个新Chat。

时间: 2024-10-25 17:43:34

XMPP客户端库Smack 4.0.6版开发之五的相关文章

XMPP客户端库Smack 4.0.6版开发之三

XMPP客户端库Smack 4.0.6版开发之三 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 六.建立连接的例子 XMPPConnection类用于创建一个到XMPP服务器的连接,代码例子如下: // 创建一个到jabber.org服务器的连接 AbstractXMPPConnection conn1 = new XMPPTCPConnection("username", "password", "jabb

XMPP客户端库Smack 4.0.6版开发

XMPP客户端库Smack 4.0.6版开发 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 三.Smack库的特征1.极度简单易用,API功能强大发送一条文本消息给某个用户只需几行代码: AbstractXMPPConnection connection = new XMPPTCPConnection("mtucker", "password", "jabber.org"); connection.

XMPP客户端库Smack 4.0.6版开发之六

XMPP客户端库Smack 4.0.6版开发之六 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 五.名单Roster和在线状态Presence 名单可以让你跟踪其他用户是否在线,而且名单可以让你把用户组织到群组,比如朋友群或工作群.而其它的即时通信IM系统则把名单Roster视为好友列表.联系人列表等等. 1.名单条目 名单中的每一个用户都由RosterEntry来表示,它包括: 1)一个XMPP地址(比如"[email protected]&qu

XMPP客户端库Smack 4.0.6版开发之一

一.Smack库概述 Smack是一个开源.易用的XMPP/Jabber客户端库,它使用Java语言开发,由Jive Software开发. Smack的优点是编程简单. Smack的缺点是其API并非为大量并发用户设计,每个客户都要1个线程,占用资源相对较,因此用Smack做模拟测试时,1台机器只能模拟有限(数千个)客户. 截止2014年11月27日,Smack库已经发展到4.0.6版. 最新的好消息是Smack在4.1.0版后将直接支持Android系统,而无需再使用以前的Smack移植版a

XMPP客户端库Smack 4.0.6版

XMPP客户端库Smack 4.0.6版 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Smack库概述 Smack是一个开源.易用的XMPP/Jabber客户端库,它使用Java语言开发,由Jive Software开发. Smack的优点是编程简单. Smack的缺点是其API并非为大量并发用户设计,每个客户都要1个线程,占用资源相对较,因此用Smack做模拟测试时,1台机器只能模拟有限(数千个)客户. 截止2014年11月27日,Smac

XMPPclient库Smack 4.0.6一个版本的开发

XMPPclient库Smack 4.0.6版开发之中的一个 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Smack库概述 Smack是一个开源.易用的XMPP/Jabberclient库,它使用Java语言开发,由Jive Software开发. Smack的长处是编程简单. Smack的缺点是其API并不是为大量并发用户设计,每一个客户都要1个线程,占用资源相对较,因此用Smack做模拟測试时,1台机器仅仅能模拟有限(数千个)客户. 截止

即时聊天IM之三 XMPP协议客户端库的和Android端框架概述

合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:[email protected] smack介绍: 上一篇我介绍了服务端openfire整合现有系统用户,当服务器整合并且搭建完成后,需要做的工作就是写客户端聊天工具了.要么基于pc要么基于移动(Android和IOS).所以这一篇我们一起学习一下smack库,smack是用java写的开源客户端XMPP (Jabber)库,在老版本

java在线聊天项目0.9版 实现把服务端接收到的信息返回给每一个客户端窗口中显示功能之客户端接收

客户端要不断接收服务端发来的信息 与服务端不断接收客户端发来信息相同,使用线程的方法,在线程中循环接收 客户端修改后代码如下: package com.swift; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; impo

尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。

从10G开始,Oracle提供了一个较为轻量级的客户包,叫做Instant Client. 将它安装好后,就不用再安装庞大的Oracle Client了. 这样一来,只要客户端下载Instant Client,直接解压,设置Path就ok了.具体设置如下:1.下载32位Oracle InstantClient 2.将Oracle InstantClient解压到某目录 3.打开PL/SQL,在perference里面设置OCI Library和Oracle_home,例子如下: