為什麼這篇python socket多人連線鄉民發文收入到精華區:因為在python socket多人連線這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者jakeasa123 (酒虎)看板Python標題[問題] Socket 傳送大資料時會與後續資...
小弟先前寫了幾個小程式,
主要透過 socket 來達成連線和資料的傳輸。
在當時就有遭遇如同標題的問題,
例如說從 server 這一方發送:
conn.sendall('執行 A'.encode('utf-8'))
conn.sendall('執行 B'.encode('utf-8'))
連續發送數個資料時,
client 方就很容易接收成:
執行 A執行 B
這樣子期望上要分開卻串在一起情形。
後來的做法是在發送時加上固定的字尾作為辨識,
例如小弟加了 DataEnd,
因此上面的例子中,
client 方會接收成:
執行 ADataEnd
執行 BDataEnd
當然偶爾還是會串在一起變成「執行 ADataEnd執行 BDataEnd」,
但因為有辨識用的字尾在裡面,
使用 find 這類函數就可以把接收到的資料切開處理。
這一次的問題則是起於我想要傳送一個較大的資料,
3 分鐘左右的影片、圖片或文件檔都好。
上述的解決辦法雖然能解決串起來的問題,
但當接收的資料較大時,
每次 client 執行 recv 完,
就得跑一次 find,
變得 30 MB 的檔案在 client 端要花上好幾十分鐘才能接收完。
一開始想說會不會是網路的問題,
但把 client 的程式碼大多都拔掉到只剩下接收功能時,
不到一分鐘就能把同樣的檔案接收完成。
因此,
想來這裡向各位前輩請教,
該如何解決這樣的窘境?
目前暫時的解決法是藉由 thread 設置了兩組 server 與 client:
第一組 server 與 client 只負責傳送簡短的資料或命令
第二組 server 與 client 只負責傳送較大檔案的資料
並在第二組 server 每次 sendall 後加入 10 秒的 sleep,
避免與下一個檔案串在一起。
先謝謝各位前輩閱覽此問了。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.30.2.5 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1616747082.A.390.html