簡體   English   中英

如何使用Python傳輸二進制數據?

[英]How do you transfer binary data with Python?

我是第一次使用客戶端服務器程序工作,但是我對所從事的工作從何處開始感到非常不滿。

我將使用Google協議緩沖區在客戶端和服務器之間傳輸二進制數據。 我將使用Python變體。 據我了解,基本思想是客戶端將序列化數據,將其發送到服務器,然后服務器將對數據進行反序列化。

問題是,我真的不確定從哪里開始將二進制數據發送到服務器。 我希望它像HTTP請求一樣“簡單”,但是我一直在Google周圍搜索傳輸二進制數據的方法,並在大量的教程,指南和文檔中迷失了方向。 我什至無法通過調查HTTP傳輸來判斷我是否在樹錯了樹(我希望使用它,因此,如果需要安全性,我可以將其與HTTPS掛鈎)。 不過,我真的不想進入套接字編程的級別-我想先使用可用的庫。 (我也更喜歡標准的Python庫,盡管如果有完善的3rd party庫,我將繼續生活。)

因此,如果有人對如何通過Python傳輸二進制數據有一個好的起點(或者想自己解釋一點),我將不勝感激。 順便說一下,我正在運行的服務器當前正在使用mod_python運行Apache。

每當您要將二進制數據從一個系統移動到另一個系統時,都需要牢記一些注意事項。

不同的機器以相同的方式存儲相同的信息。 這對內存和網絡都有影響。 此處有更多信息( http://en.wikipedia.org/wiki/Endianness

因為您使用的是python,所以您可以在這里減少一些負擔(假設客戶端和服務器都將在python中使用),而只需使用cPickle序列化您的數據即可。 如果您確實想要二進制文件,則必須熟悉python的struct模塊( http://docs.python.org/library/struct.html )。 並了解如何打包/解壓縮數據。

首先,我將從簡單的線路協議服務器開始,直到您擺脫了網絡通信的難題。 如果您從未做過,那么它很快就會令人困惑。 如何發出命令,如何傳遞數據,如何在錯誤上重新同步等...

如果您已經了解客戶端/服務器協議設計的基礎知識,那么請先練習在磁盤上打包和解壓縮二進制結構。 對於這種情況,我也參考HTTP和FTP的RFC。

-------基於注釋的編輯--------通常,這種事情是通過向服務器發送一個“標頭”來完成的,該標頭包含文件的校驗和以及文件的大小。個字節。 請注意,我並不是說HTTP標頭,您可以根據需要自定義它。 一連串的事件需要像這樣...

CLIENT: "UPLOAD acbd18db4cc2f85cedef654fccc4a4d8 253521"
SERVER: "OK"
(server splits the text line to get the command, checksum, and size)
CLIENT: "010101101010101100010101010etc..." (up to 253521 bytes)
(server reasembles all received data into a file, then checksums it to make sure it matches the original)
SERVER: "YEP GOT IT"
CLIENT: "COOL CYA"

這過於簡化,但我希望您能在這里看到我在說什么。

我不確定我是否正確回答了您的問題,但是也許您可以看看這個扭曲的項目

正如您在FAQ中所看到的,“ Twisted是用Python編寫的網絡引擎,支持多種協議。它包含Web服務器,眾多聊天客戶端,聊天服務器,郵件服務器等。Twisted由許多子組件組成。 -可以單獨訪問的項目[...]”。

該文檔非常好,並且互聯網上有很多示例。 希望能幫助到你。

我想這取決於您與Google Protocol Buffer的綁定程度,但是您可能想查看Thrift

Thrift是用於可擴展的跨語言服務開發的軟件框架。 它結合了軟件堆棧和代碼生成引擎,以構建可在C ++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,Smalltalk和OCaml之間高效且無縫運行的服務。

有一個很好的例子可以開始他們的主頁。

一個簡單的問題:為什么是二進制? 有效載荷本身是二進制的,還是僅喜歡二進制格式? 如果是以前的版本,也可以將base64編碼與JSON或XML一起使用; 它確實使用了更多的空間(約34%),並增加了處理開銷,但對於許多用例而言,不一定足夠重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM