1. 程式人生 > >XMPP通訊過程-簡單例項

XMPP通訊過程-簡單例項

上一篇文章《XMPP通訊過程簡介》介紹了XMPP協議通訊的大致主要的過程。本文基於該文,並結合例項來直觀感受XMPP通訊過程,本文的程式碼採用python編寫,使用了XMPP協議的Python實現xmpp.py(0.5.0rc1)庫;嘗試連線gtalk伺服器,實現基本的通訊過程。

XMPPPY簡介

xmpppy庫是採用python編寫的XMPP協議的實現,它是jabberpy專案的替代方案,後者已停止維護。採用該庫並結合python程式語言的特性,可以快速的實現基於XMPP協議的應用,如即時聊天系統。之後在介紹XMPP協議過程中,都將採用該庫編寫例項,因此這裡不做詳細介紹,之後會詳細的介紹XMPPPY專案,並會對其原始碼進行分析,以便了解XMPP協議的工作原理或工作方式。

Gtalk簡介

Gtalk(Google Talk)是google公司於2005年8月推出的一款IP電話和即時通訊服務,它採用了XMPP協議,並採用XMPP擴充套件協議Jingle實現VoIP功能。google提供了gtalk客戶端應用,但是其服務是面向所有基於XMPP協議的實現,因此我們也可以通過XMPP協議連線gtalk服務。

值得說的是,2005年12月google推出了libjingle庫,實現了Jingle協議。該擴充套件協議可以實現IP電話、視訊交流及其他點對點的多媒體服務。

另外,登入gtalk需要使用gmail賬戶,並且伺服器地址是talk.google.com,埠為5223。

程式碼演示

如下python程式碼實現簡單的XMPP通訊過程:

# -*- codeing:utf-8 -*-
import xmpp

username = '[email protected]'
password = '***********'
to = '[email protected]'
msg = 'Hi, Zhang San.'

def main():
    client = xmpp.Client('gmail.com')
    client.connect(server = ('talk.google.com', 5223))
    client.auth(username, password, 'botty')
    client.sendInitPresence()
    message = xmpp.Message(to, msg, typ = 'chat')
    client.send(message)

if __name__=='__main__':
    main()

這段程式碼的功能:使用本人賬戶[email protected]連線伺服器(talk.google.com, 5223),然後進行驗證,在進行初始化出席狀態,最後傳送一條訊息給[email protected]

其實xmpp.Client('gmail.com')的引數是用來傳遞xmpp通訊的域,由於我們使用的是gmail賬戶,都是gmail.com為域的。connect方法的引數其實都使可選的,只是如果connect不傳遞引數是,系統會根據域gmail.com加上預設的5222埠來連線伺服器,顯然對於gtalk服務來說是不行的,所有這裡傳遞一個server引數,指定gtalk伺服器的地址和埠。另外還有proxy, secure等引數,分別表示代理,和是否使用SSL/TLS建立連線。驗證的方法auth的前兩個引數較容易理解,第三個引數是資源名稱,這裡傳遞的是botty,該引數也是可選的,如果不傳遞,系統會指定xmpppy為資源名。該方法還有第三個引數sasl,用於指定是否採用sasl方式進行驗證。sendInitPresence方法會想伺服器發"<presence />"節,用於初始化出席狀態,便於通知所有聯絡人。Message類是XMPP節型別(IQ, Message, Pressence)中的一種,用於傳送即時訊息,這裡的typ引數用於支援訊息為兩個人的聊天,如果是群聊或組聊的話可以使用groupchat。to表示訊息的接收端jid。然後使用send方法將Message的xml串傳送到伺服器端。這樣如果[email protected]也線上的話,將收到“Hi, Zhang San.”的訊息。

另外,程式碼執行結果會輸入很多日誌資訊,因為xmpppy在很多地方還提供了debug引數,預設是要輸出很多日誌。

本例項非常簡短,主要演示使用XMPP進行通訊的過程,當然要實現完整的即時聊天系統還需要很多更加複雜的工作,之後會慢慢涉及。

相關推薦

XMPP通訊過程-簡單例項

上一篇文章《XMPP通訊過程簡介》介紹了XMPP協議通訊的大致主要的過程。本文基於該文,並結合例項來直觀感受XMPP通訊過程,本文的程式碼採用python編寫,使用了XMPP協議的Python實現xmpp.py(0.5.0rc1)庫;嘗試連線gtalk伺服器,實現基本的通

Struts2專案搭建過程(簡單例項

1:新建一個普通的javaweb專案(如圖所示,Struts2Project)。 2:新建檢視層 jsp頁面(如圖所示,分別為資訊顯示頁面index.jsp和資訊註冊頁面register.jsp)。 3:新建一個控制層 RegisterAction 類(如圖所

xmpp通訊過程分析

XMPP訊息格式 Jabber/XMPP系統使用XML流在不同實體之間相互傳輸資料。在兩個實體的連線期間,XML流將從一個實體傳送到另一個實體。在實體間,有三個頂層的XML元素:,和。每一個都包含屬性和子節點。下面將分別描述這些元素。 1)訊息(message)元素: 一個即時訊息系統最

mysql儲存過程簡單例項 變數賦值 遊標遍歷

應用場景: 有兩張表,學生表和對應的各科成績表。 學生表student 欄位:id int, name varchar(20)數值:              1             A              2             B  成績表score 欄

Android TCP通訊簡單例項以及常見問題[超時/主執行緒阻塞]

個人更喜歡著眼於例項,從最簡單的開始,一步步進行測試。 理論什麼的先放一邊,把程式跑起來再說。只有跑起來了,才會有動力去繼續往下學,參透整個程式碼的執行機制。 本次的例項目標是—— 模擬一個PC伺服器與android端的通訊,目標是儘量的做到精簡,使程式碼僅留下所需核心部

oracle儲存過程簡單例項 變數賦值 遊標遍歷

應用場景: 有兩張表,學生表和對應的各科成績表。 學生表student 欄位:id int name varchar(20) 數值:1A             2B 成績表score 欄位:id int     studentid int    subjectid int

Python使用Ctypes與C/C++ DLL檔案通訊過程介紹及例項分析

專案中可能會經常用到第三方庫,主要是出於程式效率考慮和節約開發時間避免重複造輪子。無論第三方庫開源與否,程式語言是否與當前專案一致,我們最終的目的是在當前程式設計環境中呼叫庫中的方法並得到結果或者藉助庫中的模組實現某種功能。這個過程會牽涉到很多東西,本篇文章將簡要的介紹一下該過程的一些問題。 1.背景 多

c#的串列埠通訊簡單例項

---本人是一名小白,最近在做學校有關通訊的專案。在寫這份程式碼之前,查看了許多參考程式碼。如果我有說的不對的地方,還請大家指出來。 工具:串列埠助手、串列埠除錯助手、編譯器(我用的vs2017)//完整程式碼和除錯助手 在文末有連結 一、效果圖 首先給大家放一張效果圖。 二、

.NET Core微服務之路:利用DotNetty實現一個簡單通訊過程

  上一篇我們已經全面的介紹過《基於gRPC服務發現與服務治理的方案》,我們先複習一下RPC的呼叫過程(筆者會在這一節的幾篇文章中反覆的強調這個過程呼叫方案),看下圖

Java通過Hadoop實現RPC通訊簡單例項

一、定義server端程式碼 1.定義一個介面,該介面繼承org.apache.hadoop.ipc.VersionedProtocol介面 import org.apache.hadoop.ipc.VersionedProtocol; /** * 1.伺服器定義介面

資料庫儲存過程簡單例項

網上看了半天都沒找到一個完整儲存過程從建立到呼叫的例項,於是自己寫了一個簡單的例項.資料庫建立儲存過程DELIMITER //CREATE PROCEDURE test2(in s varchar(255))BEGINSELECTcount(*)FROM`c_user` wh

Sql Server中儲存過程中輸入和輸出引數(簡單例項,一看就懂)

-- ===================【建立儲存過程】===================== USE [Message] GO /****** Object: StoredProcedure [dbo].[讀取外部資料庫查詢] Script Date:

Java的Socket通訊簡單例項

服務端 package testlxd; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; im

java網路程式設計:12、基於UDP的socket程式設計(二)程式碼通訊-簡單例項

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、基於UDP伺服器端程式的編寫 二、基於UDP客戶端程式的編寫 三、系列文章(java網路程式設計) 通過上篇文章瞭解了基於UDP通訊的理論、基本步驟以及它跟TCP的區別

利用navicat建立儲存過程、觸發器和使用遊標的簡單例項

建立儲存過程和觸發器 1、建表 首先先建兩張表(users表和number表),具體設計如下圖: 2、儲存過程 寫一個儲存過程,往users表中插入資料,建立過程如下:     程式碼如下: BEGIN #Routine body goes here... d

java 網路通訊socket實現簡單例項

Socket通訊的步驟                  ① 建立ServerSocket和Socket                  ② 開啟連線到Socket的輸入/輸出流          

Oracle Database 12c 資料庫簡單例項的建立過程

本文基於Redhat 6.7作業系統,已經成功安裝了Oracle 12c資料庫,配置好了核心引數和環境變數,僅介紹一下如何新建一個例項 Oracle Database版本:Oracle Database 12c Release 2(12.2.0.1.0) 下載地址:htt

WinSocket實現程序通訊的一個簡單例項

/* ServerNet.cpp */ #include"ServerNet.h" /*伺服器初始化*/ int ServerNet::ServerInit(const char* address, int port) { int rlt = 0; int iErrorMsg; //初始化Win

C語言例項--資料報socket通訊過程

各位看官們,大家好,上一回中咱們說的是socket通訊的例子,這一回咱們繼續說該例子。閒話休提,言 歸正轉。讓我們一起talk C栗子吧! (點選這裡檢視原文)看官們,我們在上一回中介紹了套接字的通訊步驟,限於時間的原因, 我們只介紹了流套接字的通訊步驟。

自動化測試實現過程簡單記錄

記錄 對數 現場 factory 適合 模式 自動化腳本 控制 自動化測試 第一步:判斷項目是否適合自動化 開始自動化後: 1.自動化腳本實現場景 錄制獲取測試所需控件 結構化語句控制腳本的執行 插入檢查點和異常判定反饋語句 將公共普遍功能點獨立成共享腳本 對數據實現