`

基于 XMPP协议的服务器端 文件互传的简单实现

    博客分类:
  • XMPP
XML 
阅读更多

  学习一下基于XMPP协议的文件传输,首先假设用户已经登录,这里假设Clinet Send对Clinet Receive 发送文件,这里记录了Clinet Send的发送和接收XML流记录

1、发送请求表示要向Clinet test发送文件,并发送文件大小和文件名

SEND: <iq xmlns="jabber:client" id="agsXMPP_6" to="Receive @localhost/" type="set"><si xmlns="http://jabber.org/protocol/si" profile="http://jabber.org/protocol/si/profile/file-transfer" id="b3b5f49c-8a94-49e2-908a-3de694b98af0"><file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="MiniClient.exe.config" size="382"><range /></file><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="form"><field type="list-single" var="stream-method"><option><value>http://jabber.org/protocol/byReceive reams</value></option></field></x></feature></si></iq>

 

2、Receive 收到Send发实来的请求后,发送出响应流

RECV: <iq xmlns="jabber:client" to="Send@localhost" type="result" id="agsXMPP_6"><si xmlns="http://jabber.org/protocol/si" id="b3b5f49c-8a94-49e2-908a-3de694b98af0"><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="submit"><field var="stream-method"><value>http://jabber.org/protocol/byReceive reams</value></field></x></feature></si></iq>

3、Send收到Receive 愿意接收的响应后,发出如下XML流

SEND: <iq xmlns="jabber:client" id="agsXMPP_7" to="Receive@localhost" type="set"><query xmlns="http://jabber.org/protocol/bySendreams" sid="71f1b875-4d84-429c-b39d-7dabcd400f3d"><streamhost jid="Send@localhost/MiniClient" host="localhost" port="1000" /><streamhost jid="proxy.ag-software.de" host="proxy.ag-software.de" port="7777" /></query></iq>

 注意这里注要是代理的设置,agsXMPP 自带的客户端是使用代理传输数据的,所以必须对其做相应的修改,使其支持局域网内支持发送文件.

下面我们来看一下服务器端是如何路由消息的呢?
从上面所发送的XML流我们可以看出,实际上用户传送文件所发送的都是IQ节,我们必须对IQ节进行路由才能使其找到相应的接收者 ,所以我们需要在XmppServerConnection类中添加如下代码:

private void ProcessIQ(IQ iq)
        {
//传送文件得理
  if (iq.Query == null)
            {
                if(iq.Type == IqType.result)
                    this.Send(iq);
                ProcessOobIQ(iq);
            }
            else
            if (iq.Query.GetType() == typeof(Auth))
            {
                Auth auth = iq.Query as Auth;
                this.Username = auth.Username.ToString();

                switch (iq.Type)
                {
                    case IqType.get:
                        iq.SwitchDirection();
                        iq.Type = IqType.result;
                        auth.AddChild(new Element("password"));
                        auth.AddChild(new Element("digest"));
                        Send(iq);
                        break;
                    case IqType.set:
                        // Here we should verify the authentication credentials
                        if (AccountBus.CheckLogin(auth.Username, auth.Digest, this.SessionId))
                        {
                            iq.SwitchDirection();
                            iq.Type = IqType.result;
                            iq.Query = null;
                            Send(iq);
                            Console.WriteLine(auth.Username + "登录了" + "   登录时间:" + System.DateTime.Now.ToString());
                        }
                        else
                        {
                          //  iq.SwitchDirection();
                            iq.Type = IqType.error;
                            iq.Query = null;
                            Send(iq);
                        }
                        break;
                }

            }
            else if (iq.Query.GetType() == typeof(Roster))
            {
                ProcessRosterIQ(iq);
            }//用代理传送文件处理
            else if(iq.Query.FirstChild !=null)
            {
               // iq.SwitchDirection();
               // //iq.Type = IqType.result;
               // //Send(iq);
               // iq.Type = IqType.set;
                //this.Send(iq);
                ProcessOobIQ(iq);
            }

}

 传送文件载图: 

 

  • 大小: 85.3 KB
分享到:
评论

相关推荐

    基于xmpp协议的多端即时通讯方案

    ### 基于XMPP协议的多端即时通讯方案 #### 一、开发背景 ##### 1、国际背景 随着互联网技术的飞速发展,即时通信已成为人们日常沟通的重要方式之一。1996年,Mirabilis公司推出的世界首个即时通信系统ICQ,标志着...

    net平台 基于 XMPP协议的即时消息服务端简单实现

    ### .NET平台基于XMPP协议的即时消息服务端简单实现 #### 一、XMPP协议简介 XMPP(可扩展消息与存在协议)是一种基于XML的开放标准协议,主要用于即时通讯(IM)系统,文件传输,游戏引擎,物联网(IoT),以及...

    基于xmpp协议的多端即时通讯

    即时通讯(Instant Messaging...通过以上知识点,可以了解到基于XMPP协议的多端即时通讯系统的设计、搭建、实现与应用。从协议本身的优势到实际搭建过程中的细节,都涵盖了建立一个即时通讯系统所需的关键技术和步骤。

    xmpp协议的服务器端安装文件openfire

    Openfire是由Ignite Realtime社区开发的免费开源服务器软件,它实现了XMPP协议,提供了一个高效且易于管理的即时通讯解决方案。Openfire支持多种操作系统,包括Windows、Linux和macOS。其特性包括安全的TLS/SSL加密...

    基于XMPP实现android客户端与服务器的交互(服务器、客户端源码)

    标题“基于XMPP实现android客户端与服务器的交互”指出了我们的重点:使用XMPP协议在Android应用中实现通信功能。这通常涉及两个主要部分:服务器端和客户端的开发。服务器端负责处理连接请求、消息路由以及用户身份...

    基于XMPP协议的消息推送(内含有服务器和客户端)一看就懂 简单实用

    **XMPP协议详解** ...通过`androidpn-server-0.5.0`和`androidpn-client-0.5.0`,我们可以构建一个完整的基于XMPP的Android消息推送系统,让开发者能够高效地实现实时通信功能,同时为用户提供流畅的用户体验。

    Android 基于XMPP协议IM聊天实现(客户端+服务端) 源码

    在本文中,我们将深入探讨如何使用XMPP协议在Android平台上实现一个完整的即时通讯(IM)系统,包括客户端和服务器端的实现。XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准,广泛用于...

    基于xmpp协议通讯

    【标题】:“基于xmpp协议通讯” XMPP(Extensible Messaging and Presence Protocol)是一种开放的即时通讯协议,它基于XML并被广泛用于构建实时通信系统,如聊天应用、协作工具和物联网设备之间的通信。该标题...

    基于Xmpp协议的Android端即时通讯软件,Beem的源码

    **基于Xmpp协议的Android端即时通讯软件——Beem源码解析** Xmpp(Extensible Messaging and Presence Protocol)是一种开放的、基于XML的即时通讯协议,广泛应用于各种实时通信系统,包括聊天应用、协作工具等。...

    基于XMPP协议的Android即时通信系统设计

    ### 基于XMPP协议的Android即时通信系统设计 #### 概述 随着移动通信技术的飞速发展,智能手机的普及以及移动互联网的应用日益广泛,即时通信(Instant Messaging, IM)已成为人们日常生活中不可或缺的一部分。...

    Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现.zip

    这个项目就是基于XMPP(Extensible Messaging and Presence Protocol)协议,使用Smack库,并结合Openfire服务器实现的。现在,我们将深入探讨这些关键组件以及如何将它们整合到Android应用中。 1. **XMPP协议**:...

    基于XMPP协议、HTML5的WebRTC

    在"基于XMPP协议、HTML5的WebRTC"这个项目中,开发者可能已经创建了一个使用HTML5作为用户界面,通过XMPP协议进行信令交互的WebRTC示例。用户可以通过浏览器直接参与音视频通话或者数据共享。XMPP服务器作为中间媒介...

    Android基于XMPP协议的数据推送技术.pdf

    Android基于XMPP协议的数据推送技术是实现服务器与客户端即时通信的一种有效方式。XMPP(Extensible Messaging and Presence Protocol),即可扩展消息和出席协议,是一种开放标准的即时通信协议,基于XML流。XMPP...

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

    在即时通讯工具的实现原理中,XMPP协议扮演着关键角色。客户端和服务器之间通过TCP/IP建立连接,使用XMPP协议进行数据交换。服务器作为中心节点,负责接收和转发消息,同时处理用户登录、状态更新和会话管理等功能。...

    Android应用源码基于XMPP协议的多帐号聊天.zip

    本资料主要探讨了如何在Android平台上构建一个基于XMPP协议的多账号聊天应用,通过源码分析,为开发者提供深入理解与实践参考。 首先,我们需要理解XMPP的基本原理。XMPP是一种基于XML的即时通讯协议,它通过TCP/IP...

    xmpp协议demo

    这个“xmpp协议demo”很显然是一个演示如何使用XMPP协议的项目,可能包含客户端和服务器端的实现。让我们深入探讨XMPP协议以及这个项目中的关键组成部分。 1. **XMPP协议**:XMPP最初设计用于即时通讯,但现在也被...

    基于XMPP协议的视频会议系统C#源码

    【基于XMPP协议的视频会议系统C#源码】是一个实现在线实时通信的项目,它利用了XMPP(Extensible Messaging and Presence Protocol)协议来处理即时消息传递和媒体流的交换,同时采用C#编程语言进行开发。...

    JAVA实现XMPP客户端和服务器

    本项目“JAVA实现XMPP客户端和服务器”着重于使用Java语言来构建XMPP系统的客户端与服务器端,提供一套成型的软件解决方案。 一、XMPP协议简介 XMPP最初由Jabber开源项目开发,后被IETF标准化,成为RFC 6120。它...

    XMPP协议中文帮助文档

    这份"XMPP协议中文帮助文档"将详细解释以上各点,为开发者提供清晰的指引,帮助他们理解和实现XMPP相关的功能。对于需要在项目中集成即时通讯特性的开发者来说,这是一份极具价值的参考资料。无论是初学者还是有经验...

    基于XMPP协议一套Socket通信程序(C/S都带,VS2013打开,可学习,也可直接使用,物超所值)

    本文将详细讲解基于XMPP协议的一套Socket通信程序,该程序涵盖了C/S架构,并且可以在Visual Studio 2013环境下进行开发和学习。XMPP(Extensible Messaging and Presence Protocol,可扩展消息传递和存在协议)是一...

Global site tag (gtag.js) - Google Analytics