`
zhonglunshun
  • 浏览: 138970 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Xmpp发送自定义IQ包

阅读更多

 

Xmpp发送自定义的iq

 

因为需要做扩展业务,学习了插件开发,但是客户端的怎么构造packet发消息到服务器插件一直没有搞明白,于是各种百度未果后,准备自己摸索,最开始用的和服务器一样的dom4j构造了一个xml节点,如下:

/**
 * 构建iq的扩展包,用于发送用户所在房间的名称。
 */
Document document = DocumentHelper.createDocument();
Element iqe = document.addElement("iq");
iqe.addAttribute("type", "result");
iqe.addAttribute("to", userJid.toFullJID());
iqe.addAttribute("id", IDUtil.getID());
 
Namespace namespace = new Namespace("", "larson");
Element response = iqe.addElement("wechat");
response.add(namespace);
 
// 最后发送出去!
IQ iq = new IQ(iqe);
System.out.println("iq " + iq.toXML());
router.route(iq);

 

但是发现asmackiq并没有new IQ这个方法,我怎么页new不出,在各种百度提问未果时,我想到了spark的源码,果然在spark的插件包下找到了,哦,原来是自定义的iq包是集成IQ复写里面的方法,然后发送自定义的这个对象来实现的,如下:

 

import org.jivesoftware.smack.packet.IQ;

public class WeChatPacket extends IQ {

	public static final String ELEMENT_NAME = "wechat";
	public static final String NAMESPACE = "wechat";

	private String urlStr;
	private String json;

	public String getUrlStr() {
		return urlStr;
	}

	public void setUrlStr(String urlStr) {
		this.urlStr = urlStr;
	}

	public String getJson() {
		return json;
	}

	public void setJson(String json) {
		this.json = json;
	}

	@Override
	public String getChildElementXML() {
		StringBuffer buf = new StringBuffer();
		buf.append("<" + ELEMENT_NAME + " xmlns=\"" + NAMESPACE + "\">");
		if (getType() == IQ.Type.GET) {
			buf.append("<urlStr>").append(urlStr).append("</urlStr>");
			buf.append("<json>").append(json).append("</json>");
			buf.append(getExtensionsXML());
		}
		buf.append("</" + ELEMENT_NAME + ">");
		return buf.toString();
	}

}

 发送的时候直接发送就好了:

 

private static Packet makeXmppPacket(String urlStr, String json) {
		
		WeChatPacket packet = new WeChatPacket();
		packet.setJson(json);
		packet.setUrlStr(urlStr);
		packet.setType(IQ.Type.SET); 
		return packet;
	}

 

特意写个博客出来帮助和我一样在摸索的小伙伴。

 

尊重原创,转载请注明出处,谢谢。

0
1
分享到:
评论

相关推荐

    Android XMPP通讯自定义Packet&Provider

    Android XMPP通讯自定义Packet&Provider是Android平台上实现XMPP(Extensible Messaging and Presence Protocol)协议通信的关键技术。XMPP是一种基于XML的实时通讯协议,广泛应用于即时消息、在线状态和数据交换。...

    xmpp 缺省Jar包

    - **扩展与自定义**:XMPP协议允许扩展,开发者可以通过自定义XML元素来实现特定功能,如群聊、文件传输等。 - **性能优化**:利用Coherence的数据网格功能,可以实现高效的缓存策略,减少数据库访问,提高系统性能...

    xmpp 协议即时通讯

    4. **XML stanza**:XMPP的消息、IQ(信息/查询)和存在性(Presence)都是以XML stanza的形式传递。 5. **TLS/SSL安全**:为了保证通信安全,XMPP通常使用TLS/SSL加密连接。 6. **扩展机制**:XMPP允许添加自定义...

    xmpp客户端源代码

    `Smack`库,一个流行的XMPP客户端库,提供了处理XML流的能力,包括解析IQ(信息查询)、Presence(状态)和Message(消息)等元素。 4. **注册与登录**:用户在首次使用时需要注册,之后每次启动应用时登录。客户端...

    xmpp客户端协议实现源代码

    XMPP(Extensible Messaging...通过研究SMACK的源代码,开发者可以深入了解XMPP的工作原理,学习如何利用它来创建自定义的、功能丰富的通讯应用。同时,对于理解XML流处理、网络编程和事件驱动模型等方面也有很大帮助。

    XMPP源代码

    - XMPP协议允许扩展新的功能和协议,因此jabber-net库可能支持通过插件添加自定义功能,如语音通话、视频聊天等。 7. **应用领域**: - 除了基本的IM,XMPP还广泛应用于物联网、智能家居、协同工作系统等场景,...

    xmpp下的即时聊天客户端

    6. **扩展功能**:XMPP协议的可扩展性使得开发者能够添加自定义功能,如文件传输、音视频通话等,这些通常通过XEP(XMPP Extension Protocols)来实现。 在文件列表中提到了“WelcomeActivity”,这在Android开发中...

    XMPP协议--即时通讯工具实现原理

    agsXMPP库支持这些扩展,开发者可以通过添加自定义元素和处理程序来实现。 6. **安全性与隐私**:XMPP支持TLS/SSL加密,确保通信的安全性,防止数据被窃听。此外,服务器还可以通过设置权限和访问控制列表来保护...

    XMPP客户端Java类库:Smack

    8. **扩展功能**:Smack允许开发者通过实现自定义的XMPP扩展协议来增强功能,如XEP(XMPP Extension Protocols)。 **四、Smack API详解** Smack的API设计简洁且直观,主要包含以下组件: - **连接器...

    xmpp的详细研究

    - **XMPPMessage** 和 **XMPPIQ**: 处理XMPP中的消息和查询请求。 - **XMPPPresence**:处理在线状态的发送和接收。 学习这个框架,你需要理解如何配置XMPP服务器(如Ejabberd或Openfire),设置客户端连接,创建和...

    XMPP研究.zip

    - IQ(Info/Query):用于发送查询或获取信息的特殊消息类型。 3. **Android源码解析** - 登录流程:用户通过输入用户名和密码,创建XMPPTCPConnection实例,进行认证过程。 - 发送接收消息:使用Message类创建...

    如何在openfire的as3库 XIFF Extensions 中传递自定义信息

    在XIFF中,可以通过向任何发送到XMPP服务器的XMPP Stanza(IQ、Message或Presence)添加扩展来实现这一目标。每个Stanza类都有一个`addExtension()`方法,用于添加自定义扩展。 要创建自定义扩展,你需要继承XIFF的...

    xmpp相关

    4. **组件与扩展**:XMPP允许添加自定义组件来扩展其功能,例如,多用户聊天(MUC)、文件传输、VoIP等。 5. **安全与隐私**:XMPP支持SSL/TLS加密,以确保通信的安全性,同时也有严格的访问控制列表(ACL)来保护...

    Android应用源码之【仿微信即时聊天】xmpp4Android 第一期.zip

    在XMPP中,这通过发送IQ(Information Query)、Presence(状态)和Message(消息)三种类型的 stanza(元素)来实现。源码中会包含发送和接收这些stanza的处理逻辑。 5. **推送通知**:为了确保即使应用在后台或...

    XMPP_协议笔记

    通过使用自定义的XML命名空间,开发者可以创建新的数据类型和功能,使得XMPP能够适应各种应用场景,如文件传输、多用户聊天室(MUCs)和语音/视频通话。 8. **Jabber系统结构** Jabber系统由多个组件构成,包括...

    android xmpp 仿微信

    - 聊天功能:发送和接收文本、图片等消息,通过XMPP的IQ(Information Query)和Message元素实现。 - 状态管理:显示用户在线状态,利用Presence元素更新和接收对方状态。 3. **服务器端**: - 服务器选择:可能...

    有关xmpp的文档

    - `vcard:temp`:临时vCard,允许用户自定义头像和昵称等信息。 #### 5. 消息格式定义 XMPP的消息格式围绕XML流构建,其中: - `&lt;stream&gt;`元素作为XML流的起始与结束标志,包裹着各种交互和通信信息。 - `...

    xmpp——Smack的IM实现

    在实现XMPP即时通讯时,首先需要了解XMPP的基本概念,如JID(Jabber ID)用于标识用户,以及IQ(Information Query)、Presence和Message作为XMPP的核心元素,分别用于获取信息、报告在线状态和发送消息。...

    XMPP学习代码

    1. **可扩展性**:XMPP允许通过添加自定义扩展来实现新的功能,比如文件传输、群聊和位置共享。 2. **基于XML**:XML使得数据结构清晰,易于解析和理解,但也可能导致性能上的小损失。 3. **双向通信**:XMPP支持...

    xmpp js库:strophe.flxhr.js,strophe.js,flxhr

    它提供了与XMPP服务器交互的接口,包括连接、断开连接、发送接收消息、处理 Presence(在线状态)和 IQ(信息查询)等基本操作。Strophe.js 的设计目标是易于理解和使用,同时也支持扩展,允许开发者根据需要添加...

Global site tag (gtag.js) - Google Analytics