【python】-- Socket接收大資料

來源:互聯網
上載者:User

標籤:blog   解決   com   客戶   取資料   accept   大資料   ref   get   

Socket接收大資料

上一篇部落格,就是說當伺服器發送至用戶端的資料,大於用戶端設定的資料,則就會把資料服務端發過來的資料剩餘資料存在IO緩衝區中,這樣就會造成我們想要擷取資料的完整性。

解決思路:

               1、改大用戶端接收的資料的大小,因為官方建議最多隻能接收8k的資料,那服務端發送過來的資料很容易就會大於8K,這個思路並不能從根本上解決問題(不建議使用)

               2、用戶端可以多收幾次,服務端給用戶端發資料之前,先計算一下要發給用戶端資料大小(len()判斷檔案長度) ,比如說要發給用戶端資料是5k大小,先把5K這個值發送給用戶端,用戶端知道總共會接收5K的值,就知道需要接收多少次了,迴圈接收,直到5k資料全部接收完畢為止。

邏輯流程圖:

服務端代碼:

import socket,os server = socket.socket()server.bind(("localhost",9999))server.listen(5)while True:    conn,addr = server.accept()    print("new addr:",addr)    while True:        data = conn.recv(1024)        if not data:            print("用戶端已斷開")            break        print("執行指令:",data)        cmd_res = os.popen(data.decode()).read()        print("before send:",len(cmd_res))        if len(cmd_res) == 0:            cmd_res = "cmd has no output...."        conn.send( str(len(cmd_res.encode())).encode() )  #發送服務端發送給用戶端資料的長度        conn.send(cmd_res.encode("utf-8"))   #發送服務端的資料        print("send done")server.close()

用戶端代碼:

import socket client = socket.socket()client.connect(("localhost",9999)) while True:    cmd = input(">>>:").strip()    if len(cmd) == 0:continue    client.send(cmd.encode("utf-8"))    cmd_res_size = client.recv(1024)  #接收命令的長度    print("命令結果大小:",cmd_res_size.decode())    recevied_size  = 0   #接收用戶端發來資料的計算機    recevied_data = b‘‘  #用戶端每次發來內容的計數器    while recevied_size < int(cmd_res_size.decode()):  #當接收的資料大小 小於 用戶端發來的資料        cmd_res = client.recv(1024)        recevied_size += len(cmd_res)  #每次收到的服務端的資料有可能小於1024,所以必須用len判斷        recevied_data += cmd_res    else:        print(recevied_data.decode("utf-8","ignore"))        print("cmd res receive done ....",recevied_size) client.close()

 

【python】-- Socket接收大資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.