我是套接字編程的新手,最近爲它挑選了Python。我有幾個問題,我似乎無法找到明確的答案。Python:通過UDP發送大對象
我正在研究通過UDP發送數據,並寫了一個簡單的python腳本來做到這一點。可以很好地發送小對象(準確地說是小醃製對象),但我應該如何處理太大而不適合一個UDP數據包的對象?
我想過先以字節爲單位調整對象大小。如果對象足夠小以適應UDP數據包,則不會執行任何操作,但如果對象太大,對象將被均勻地分割(如果可能的話)爲許多較小的塊,以便它可以適合多個UDP數據包併發送到客戶端。一旦客戶端收到組塊,客戶端就會將多個UDP數據包重組爲原始狀態。
當試圖實現上述提示時,我立即打開了我的第一堵磚牆。
從我的研究中,似乎沒有任何「有效」的方法來獲取對象的字節大小。這意味着我無法確定一個對象是否太大而不適合UDP數據包。
如果我堅持將大對象發送到客戶端會發生什麼?它會自動分片並在客戶端重新組合,還是客戶端會丟棄數據包?
通過UDP處理大型對象的正確方法是什麼?請記住,大對象可能是1GB大小的文件或25MB大小的字節對象。
在此先感謝。
旁註:
我也明白,UDP數據包可能並不總是爲了和 它因此,我已經實現了對策是 到標籤的序列號發送的UDP數據包給客戶。
我明白,不能保證客戶端將收到所有的UDP數據包。我現在不關心數據包丟失。
我明白,TCP是我正在嘗試做的事情的合適人選,但我的重點是理解UDP以及如何處理現在無法確認客戶端數據包的情況。
我明白泡菜的用法是不安全的。稍後會考慮它。
感謝您的明確解釋。我知道如果文件太大,可以手動將文件分解爲塊,但是對於大於500字節的字節或醃製對象又如何呢?或者對於達到這種大小的python對象來說不太可能?另外,你甚至知道你正在嘗試發送的python對象的大小超過500字節,因爲sys.getsizeof很沒用。 – loftystew
如果你正在傳輸的是一個文件,當然有python中的方法來獲取文件大小和讀取塊。 –
不幸的是,它不是一個文件。我有這樣的想法,我有一個數組存儲順序UDP數據包的數據(例如每5個數據包),然後再將它發送到另一個客戶端。可能有些時候陣列可能會變得太大。不確定這個想法是否可行。 – loftystew