Jabber学习笔记 之二

jabber服务器搭建 经过几次努力,我终于在我的ubuntu上成功搭建起了jabber即时通讯服务器。由于是源码编译的所以没有放到ubuntu分类下。由于依赖于openssl和mysql,所以安装之前要把这两个准备好(如果configure的时候提示找不到mysql的文件那可能是你的mysql没有安装dev包)现将大致步骤介绍如下(本文只研究在局域网内架设服务器,互联网上可能需要改动一些地方:): 1、首先到ht 阅读详情
三、Jabber核心协议(XMPP Core :RFC3920)
1、 /XML Stanza XML Stream
Stream :以 <stream> 开始,至 </stream> 结束,在整个生命周期中,可以包含任意数量的 XML 元素
Stanza : Stream 中结构化的 XML 片断
整个流看起来大致如下:
|--------------------|
| <stream>           |
|--------------------|
| <presence>         |
|   <show/>          |
| </presence>        |
|--------------------|

| <message to='foo'> |
|   <body/>          |
| </message>         |
|--------------------|

| <iq to='bar'>      |

|   <query/>         |

| </iq>              |
|--------------------|

| ...                |
|--------------------|

| </stream>          |
|--------------------|
 
 
2、 Stream Attributes
to :用于发起方stream 中( initial stream),表明接收者,响应Stream不能包含to,如果有则被忽略;
from :用于响应Stream中( response stream),表明接收者,发起方Stream不能包含from,如果有则被忽略;
id :用于响应 Stream 中,唯一性标识,出于安全性考虑,建议随机生成;
xml:lang :缺省语言
version :版本号,通常为 1.0
 
3、 Stream Error:
当遇到有stream级别的错误时,需要发送一个<error/>tag,具体语法如下:
<stream:error>
 <defined-condition xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>

 <text xmlns='urn:ietf:params:xml:ns:xmpp-streams'

        xml:lang='langcode'>
    OPTIONAL descriptive text

 </text>

 [OPTIONAL application-specific condition element]
</stream:error>
 
defined-condition举例: <xml-not-well-formed/> 、 <not-authorized/> 、 <bad-format/> 、 <host-unknown/> 等
 
当一个Stream被发起以后,需要通过TLS来保证连接的安全性,下面是一个从客户端到服务器的例子。
Step 1: Client initiates stream to server:
<stream:stream
    xmlns='jabber:client'

    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>
Step 2: Server responds by sending a stream tag to client:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_123'
    from='example.com'
    version='1.0'>
Step 3: Server sends the STARTTLS extension to client along with authentication mechanisms and any other stream features:
<stream:features>
 <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>
    <required/>
 </starttls>

 <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>DIGEST-MD5</mechanism>

    <mechanism>PLAIN</mechanism>

 </mechanisms>
</stream:features>
Step 4: Client sends the STARTTLS command to server:
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
Step 5: Server informs client that it is allowed to proceed:
<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
Step 5 (alt): Server informs client that TLS negotiation has failed and closes both stream and TCP connection:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
</stream:stream>
Step 6: Client and server attempt to complete TLS negotiation over the existing TCP connection.
Step 7: If TLS negotiation is successful, client initiates a new stream to server:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>
Step 7 (alt): If TLS negotiation is unsuccessful, server closes TCP connection.
Step 8: Server responds by sending a stream header to client along with any available stream features:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'

    from='example.com'

    id='c2s_234'
    version='1.0'>
<stream:features>

 <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>DIGEST-MD5</mechanism>
    <mechanism>PLAIN</mechanism>
    <mechanism>EXTERNAL</mechanism>
 </mechanisms>
</stream:features>
Step 9: Client continues with SASL negotiation (Use of SASL) .
 
5、 Simple Authentication and Security Layer (SASL) protocol
在 TLS 之后是用户的安全认证,采用 SASL 协议,下面是一个从 client 到 server 的例子:
   Step 1: Client initiates stream to server:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>
Step 2: Server responds with a stream tag sent to client:
<stream:stream
    xmlns='jabber:client'

    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_234'

    from='example.com'
    version='1.0'>
Step 3: Server informs client of available authentication mechanisms:
<stream:features>
 <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>

    <mechanism>DIGEST-MD5</mechanism>
    <mechanism>PLAIN</mechanism>

 </mechanisms>
</stream:features>
Step 4: Client selects an authentication mechanism:
<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
      mechanism='DIGEST-MD5'/>
Step 5: Server sends a [BASE64] (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” July 2003.) encoded challenge to client:
<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9ImF1dGgi LGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNzCg==
</challenge>
The decoded challenge is:
realm="somerealm",nonce="OA6MG9tEQGm2hh",/
qop="auth",charset=utf-8,algorithm=md5-sess
Step 5 (alt): Server returns error to client:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
 <incorrect-encoding/>

</failure>
</stream:stream>
Step 6: Client sends a [BASE64] (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” July 2003.) encoded response to the challenge:
<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> dXNlcm5hbWU9InNvbWVub2RlIixyZWFsbT0ic29tZXJlYWxtIixub25jZT0i T0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5jPTAw MDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5jb20i LHJlc3BvbnNlPWQzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3LGNo
YXJzZXQ9dXRmLTgK
</response>
The decoded response is:
username="somenode",realm="somerealm",/
nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",/
nc=00000001,qop=auth,digest-uri="xmpp/example.com",/ response=d388dad90d4bbd760a152321f2143af7,charset=utf-8
Step 7: Server sends another [BASE64] (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” July 2003.) encoded challenge to client:
<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=
</challenge>
The decoded challenge is:
rspauth=ea40f60335c427b5527b84dbabcdfffd
Step 7 (alt): Server returns error to client:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
 <temporary-auth-failure/>
</failure>

</stream:stream>
Step 8: Client responds to the challenge:
<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
Step 9: Server informs client of successful authentication:
<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
Step 9 (alt): Server informs client of failed authentication:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
 <temporary-auth-failure/>
</failure>

</stream:stream>
Step 10: Client initiates a new stream to server:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'

    version='1.0'>
Step 11: Server responds by sending a stream header to client along with any additional features (or an empty features element):
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_345'
    from='example.com'
    version='1.0'>

<stream:features>

 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>

 <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>

</stream:features>
 
6、  Resource Binding
SASL之后便是Resource Binding,但这个只是client到server时需要,而server与server之间不需要。
    Server advertises resource binding feature to client:
<stream:stream
    xmlns='jabber:client'

    xmlns:stream='http://etherx.jabber.org/streams'

    id='c2s_345'

    from='example.com'
    version='1.0'>
<stream:features>

 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>

</stream:features>
If the client wishes to allow the server to generate the resource identifier on its behalf, it sends an IQ stanza of type "set" that contains an empty <bind/> element:
Client asks server to bind a resource:
<iq type='set' id='bind_1'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>

</iq>
A server that supports resource binding MUST be able to generate a resource identifier on behalf of a client. A resource identifier generated by the server MUST be unique for that <node@domain>.
If the client wishes to specify the resource identifier, it sends an IQ stanza of type "set" that contains the desired resource identifier as the XML character data of a <resource/> element that is a child of the <bind/> element:
Client binds a resource:
<iq type='set' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>

    <resource>someresource</resource>
 </bind>

</iq>
Once the server has generated a resource identifier for the client or accepted the resource identifier provided by the client, it MUST return an IQ stanza of type "result" to the client, which MUST include a <jid/> child element that specifies the full JID for the connected resource as determined by the server:
Server informs client of successful resource binding:
<iq type='result' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>

    <jid>somenode@example.com/someresource</jid>
 </bind>

</iq>
A server SHOULD accept the resource identifier provided by the client, but MAY override it with a resource identifier that the server generates; in this case, the server SHOULD NOT return a stanza error (e.g., <forbidden/>) to the client but instead SHOULD communicate the generated resource identifier to the client in the IQ result as shown above.
When a client supplies a resource identifier, the following stanza error conditions are possible (see Stanza Errors (Stanza Errors)):
·         The provided resource identifier cannot be processed by the server in accordance with Resourceprep (Resourceprep).
·         The client is not allowed to bind a resource to the stream (e.g., because the node or user has reached a limit on the number of connected resources allowed).
·         The provided resource identifier is already in use but the server does not allow binding of multiple connected resources with the same identifier.
The protocol for these error conditions is shown below.
Resource identifier cannot be processed:
<iq type='error' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>

    <resource>someresource</resource> 
</bind>

 <error type='modify'>
    <bad-request xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
 </error>
</iq>
Client is not allowed to bind a resource:
<iq type='error' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>
    <resource>someresource</resource>
 </bind>

 <error type='cancel'>

    <not-allowed xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>

 </error>

</iq>
Resource identifier is in use:
<iq type='error' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>

    <resource>someresource</resource>
 </bind>

 <error type='cancel'>

    <conflict xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
 </error>
</iq>
If, before completing the resource binding step, the client attempts to send an XML stanza other than an IQ stanza with a <bind/> child qualified by the 'urn:ietf:params:xml:ns:xmpp-bind' namespace, the server MUST NOT process the stanza and SHOULD return a <not-authorized/> stanza error to the client.
 
7、  XML Stanzas
'jabber:client' 和 'jabber:server' 命名空间定义了三种 stanza:<message/> 、 <presence/> 、 <iq/>.
       详细定义需要学习RFC3921。
8、  实验
分别选择两个Jabber Server做连接测试:
第一个:jabber.org
telnet jabber.org 5222
<?xml version='1.0'?>
<stream:stream
       to='jabber.org'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       version='1.0'>
收到如下内容:
<?xml version='1.0'?>
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       id='94769953'
       from='jabber.org'
       version='1.0'
       xml:lang='en'>
      
       <stream:features>
              <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
              <compression xmlns='http://jabber.org/features/compress'>
                     <method>zlib</method>
              </compression>                  
              <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
                     <mechanism>DIGEST-MD5</mechanism>
                     <mechanism>PLAIN</mechanism>
              </mechanisms>
              <register xmlns='http://jabber.org/features/iq-register'/>
       </stream:features>
从返回的内容来看,基本上跟RFC3720所说一致,不过多了一个压缩?,接下来就没法进行了,看来还得研究一下压缩算法
 
第二个:talk.google.com,这个就是大名鼎鼎的Google Talk了,由于也是采用XMPP,因此也可能连接:
telnet talk.google.com 5222
<?xml version='1.0'?>
<stream:stream
       to='google.com'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       version='1.0'>
收到内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<stream:stream from="google.com"
       id="8F2DEA3E08EDD09C"
       version="1.0"
       xmlns:stream="http://etherx.jabber.org/streams"
       xmlns="jabber:client">
       <stream:features>
              <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
              <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
                     <mechanism>X-GOOGLE-TOKEN</mechanism>
              </mechanisms>
       </stream:features>
google talk倒是没采用压缩算法,不过居然是自己专用的SASL。
接下来发送:
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
收到:
<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
TLS还是能够顺利进行的,接下来的就没法进行了。可以看出跟Google Talk通信是可行的,只不过需要熟悉Google Talk的扩展协议,目前暂时还没有收集这方面的资料。
转自: http://blog.youkuaiyun.com/zzyy00/archive/2006/12/22/1453498.aspx
jabber技术概况 Jabber 技  术  概  况Jabber即时通信系统服务整体框架的概述1、Jabber技术概述       本文档包括以下内容:?           Introduction 简介?           Foundations 基本知识?           High-Level Server Architecture高阶服务体系?           Basi 阅读详情

相关推荐

Jabber Frame(超时传输帧)

Jabber超时传输帧

网始如芯个人博客 4323

XMPP学习2-XMPP通讯原语

XMPP通讯原语

Nassue_sn的博客 942

即时通讯体验:JabberMixClient客户端实战指南

本文还有配套的精品资源,点击获取 简介:JabberMixClient 是一款支持即时通讯和消息传递的客户端软件,采用XMPP(Jabber协议),为用户提供实时通信解决方案。该软件包含两个核心组件和相关文档,以及通过.jad文件提供配置信息,通过.jar文件实现客户端的主要功能。用户可以通过支持Java的设备安装和运行JabberMixClient,并利用其提供的多用户聊...

weixin_36064575的博客 1115

Jabber 简介(Technology Computer English)

Jabber is an open XML protocol for the real-timeexchange of messages and presence between any two points onthe Internet. The first application of Jabber technology is anasynchronous, extensible instan

VisionLee's 窝 1044

JabberClient-开源

使用.NET Compact Framework用C#编写的Jabber客户端,可在Windows PC和Windows Mobile PDA上使用。 它主要用于需要限制用户操作的公司环境中。

【软件安装系列】Ubuntu+mysql5.7.27+Jira8.3.1+邮箱服务器配置+Confluence6.15.7安装经验和采坑总结

文章目录一、软件准备(百度云易被吞,就不放了)1.1 官网下载的新鲜的Jira和Confluence1.2 linux的jdk一份1.3 Jira和Confluence的破解程序或者破解包一份1.4 java的连接器一份二、安装过程1--java环境配置2.1 将下载下来的jdk包解压在/usr/local/java目录中2.2 写入环境变量三、安装过程2--mysql5.7.27环境配置3.1 ...

xiaosha_的博客 6892

XMPP使用tls 和sasl登录

转载:http://sffqtbl.ycool.com/post.3664101.html 名词解释 TLS:安全传输层协议 TLS:Transport Layer Security 名词: 安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake

zhangxinrun的专栏 5281

别再死记硬背了!用51单片机的AD/DA和PWM,亲手做个简易示波器信号发生器

本文详细介绍了如何利用51单片机的PWM和AD/DA功能制作简易示波器信号发生器。通过PWM模拟DAC输出波形,结合XPT2046 ADC进行信号测量,实现方波、三角波和正弦波的生成与显示。项目不仅成本低廉,还能帮助电子爱好者深入理解51单片机的核心功能,是理论与实践结合的绝佳案例。

weixin_28675839的博客 265

Jabber学习笔记 之一

一、  核心概念Jabber 1、 DomainJabber领域由大到小可以分为以下几个实体:network:由多个相互交换信息Jabber Domain组成domain:Jabber domain必需是一个有效的Internet域名,它提供本地控制,并可以与域名外的用户通信。server:管理domain的逻辑实体user:逻辑上的信息传输终节点,传输的数据包通常是指

zzyy00的专栏 3609

比较器和运算放大器-2

今天继续了解输入阻抗问题,观察下图:首先考虑在我们没有接运放时,A点输出电压为6V,当接入如图所示的阻抗时电压还是6V吗?共模电阻和红框内对地电阻并联,阻值变小,相当于5k,通过计算可以求得A点电压变为4V,这样A的值发生了改变,试想一下这样的信号接入到运放的两端是不是相当于比较的两端信号发生了改变,那结果一定会发生偏离。信号源一般内阻是不确定的,一般也不是很小,如果不想改变输入阻抗,那唯一的办法就是改变运放的内阻了,比如内阻改为100K,1M等,越大越好,是不是A点电压就会无限接近6V。

weixin_42855218的博客 1311

Windows批处理脚本实战:用Ping命令打造简易网络监控工具(附完整代码)

本文介绍如何利用Windows批处理脚本和Ping命令,快速构建一个轻量级、自动化的网络监控工具。该方案无需额外安装软件,通过周期性探测目标IP连通性,并将结果(成功、失败及延迟)自动记录到带时间戳的日志文件中,适合中小团队或临时监控需求,实现低成本、高效率的网络状态监控。

5f4d3s2a1q的博客 494

Jabber学习笔记 之三

四、 XMPP-IM (RFC3921) 1、XML Stanza语法1.1 Message语法:类型:通过属性type指定,可用类型如下:chat:一对一聊天error:发送前一消息时发生错误,语法在上一节XMPP-CORE中已经有说明groupchat:组聊,这个不在本协议范围,需要参考扩展协议JEP-0045headline:不需要回复的消息norma

zzyy00的专栏 2740

【数据集】30 m地表温度LST数据集

【数据集】30 m地表温度LST数据集

WW、forever的博客 1127

Asterisk Jabber

<br />Jabber is a common name for XMPP-based instant-messaged and communication. <br />Native jabber support in Asterisk <br />The Jabber module in Asterisk (res_jabber) is available starting from the 1.4 series. Therefore, you can connect Asterisk as a cl

RTC hacker 2079

64、5G 侧链通信技术详解

本文详细解析了5G侧链通信的关键技术,包括资源感知与选择、UE间协调、混合ARQ、功率控制、信道探测与CSI报告以及侧链同步。资源感知与选择通过周期性或随机方式实现资源分配,UE间协调通过主动或被动方式避免资源冲突。混合ARQ机制确保数据传输可靠性,功率控制和信道探测优化传输质量并减少干扰。侧链同步则通过多种方式确保设备间时间一致性。这些技术相互配合,构建了高效稳定的5G侧链通信体系,适用于智能交通、物联网、应急通信等多个领域,为未来无线通信发展提供强大支撑。

oil88的博客 101

静态时序分析(STA)—— 标准单元库

目录 1、时序库 概览 2、时序模型 1、基本概念 2、影响因素 3、线性延时模型 4、非线性延时模型 5、单元时序弧 1、组合逻辑单元 2、时序逻辑单元 6、线负载模型 参考说明 上一篇,学习了 STA相关的基本概念,本篇继续学习 STA相关的 标准单元库。 1、时序库 概览 库文件概览: 2、时序模型 1、基本概念 2、影响因素 对于组合逻辑的时序弧而言,其延时的大小取决于: 1、输出负载,即,输出端的电容负载的大小。容性负载越大,...

记录所学,分享知识,结识挚友 2853

Jabber Software:Jabber-NET、agsXMPP与Wilefire

原文:http://jiaoyu.gjjblog.com/ReadUrl.php?id=569681本篇介绍两个使用.NET技术,确切的说是使用C#写的Jabber Code Libraries – Jabber.NET、agsXMPP,以及一个Java写的跨平台Jabber Server – Wilefire。前言:即将完成Jabber Protocal(XMPP) : Core

蜗牛档案室 2514

Spring AI Alibaba 1.x 源码分析-架构设计

本文通过分析Spring AI Alibaba 框架的源码,分析出其原理和架构设计,无论是用于项目开发、技术评估还是团队培训都具有重要价值。

program哲学 490

jabber

目录1 历史2 优点3 运作方式 4 连接其他协定5 Jabber客户端软件列表1 历史2 优点3 运作方式 4 连接其他协定5 Jabber客户端软件列表6 Jabber服务器端软件7 使用Jabber协议的客户端与服务器端对话的例子<br /> jabber Jabber是一个开放的、基于XML的协议。它的用途在即时通讯及Presence资讯方面。 <br /> jabber - 历史<br />JeremieMiller于1998年开始了这个项目。第一个公开版本于2000年5月发行。这个项目的主要

RTC hacker 2416

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

遇到Jabber

最近因为一个学生的原因 ,我偶遇到Jabber,很快就被其开放性所吸引.Jabber给了IM新的发展机遇.所有通讯环节都是依赖XML来实现,几乎不受平台限制, 这样就给客户端软件和服务器端软件更多选择,也增强了互操作性JSF是其主力组织.你可以通过JABBER.ORG来了解其全况.GOOGLE的通讯工具 GOOGLE TALK 正是利用JABBER来开发后面我将写上一些关于JABBER开发的文章

Mr Xie的专栏----- 精致的代码是艺术品 1334

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

收发Jabber消息流程

  1.   聊天对话框基本信息:1)        对话框模板:  IDD_MSG2)        窗口过程:  DlgProcMessage3)        “发送”按钮: IDOK 在聊天对话框初始化的时候关于该联系人所用协议等信息已经做为该窗口的用户数据设置好了,用到的时候只要以GWL_USERDATA 为参数调用GetWindowLong就可以得到该用户数据的

hurtmanzc的专栏 5267

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Jabber 协议 概述

1. 介绍    Jabber是一个由开源社区发起并领导开发的即时消息和在线状态的系统。Jabber系统和其它即时消息(IM)服务的一个功能上的差别在于Jabber拥有开放的XML协议。在保持Jabber1.0版本有关消息核心以及在线状态的协议的基础上,增加了一些必要的扩展。本文档将对Jabber服务器1.4版的Jabber协议进行介绍。    在XML上下文的数据流中,Jabber开放的

2399

Jabber

   Jabber 是著名的Linux即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。Jabber最有优势的就是其通信协议,可以和多种即时通讯对接。比如有第三方插件,能让jabber用户和MSN 、Yahoo  Messager、ICQ等IM用户相互通讯。因为Google遵从jabber协议,并且Google已经将Gt

Transient1984的专栏 1103

对jabber客户端mobber的分析

JABBER客户端是依托SOCKET,HTTP等网络连接发送XMPP协议定义的STREAM流的客户端程序。mobber是java实现的J2ME jabber客户端,核心是按照XMPP协议实现了XML的读写.doc文档如下: 点击下载此文件

乌托邦 1399

Jabber介绍

Jabber介绍一. 前言    这是我粗略读了一遍Jabber协议和相关技术文章后的产物,有些地方不一定准确。在文章中引用的一些代码来自www.jabber.org上的文章。二. 什么是Jabber    Jabber就像ICQ,MSN一样,是一个基于Internet的即时通讯系统,但是同这些即时通讯软件不同的是,它是一个开放的即时通讯系统,也是一个基于XML Stream 的协议,用于在I

Lutts的专栏 1347
上一篇: apache虚拟主机配置
下一篇: Subscriptions 运行机制
niitsoftware
博客等级 码龄20年 4粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值