本篇內容主要講解“python怎么實現TCP文件接收和發送”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python怎么實現TCP文件接收和發送”吧!
根據自己需求修改,簡單局域網下完成文件收發
客戶端
# 由客戶端向服務器傳數據,文件 import socket import tqdm import os def send(filename): # 傳輸數據間隔符 SEPARATOR = '<SEPARATOR>' # 服務器信息 host = '127.0.0.1' port =1234 # 文件緩沖區 Buffersize = 4096*10 # 傳輸文件名字 filename = filename # 文件大小 file_size = os.path.getsize(filename) # 創建socket鏈接 s = socket.socket() print(f'服務器連接中{host}:{port}') s.connect((host, port)) print('與服務器連接成功') # 發送文件名字和文件大小,必須進行編碼處理 s.send(f'{filename}{SEPARATOR}{file_size}'.encode()) # 文件傳輸 progress = tqdm.tqdm(range(file_size), f'發送{filename}', unit='B', unit_divisor=1024) with open(filename,'rb') as f : # 讀取文件 for _ in progress: bytes_read = f.read(Buffersize) if not bytes_read: break # sendall 確保網絡忙碌的時候,數據仍然可以傳輸 s.sendall(bytes_read) progress.update(len(bytes_read)) # 關閉資源 s.close() if __name__ == '__main__': filename = input('請輸入文件名:') send(filename)
服務器端
import socket
import tqdm
import os
import threading
def received():
# 設置服務器的ip和 port
# 服務器信息
sever_host = '127.0.0.1'
sever_port =1234
# 傳輸數據間隔符
SEPARATOR = '<SEPARATOR>'
# 文件緩沖區
Buffersize = 4096*10
s = socket.socket()
s.bind((sever_host, sever_port))
# 設置監聽數
s.listen(128)
print(f'服務器監聽{sever_host}:{sever_port}')
# 接收客戶端連接
client_socket, address = s.accept()
# 打印客戶端ip
print(f'客戶端{address}連接')
# 接收客戶端信息
received = client_socket.recv(Buffersize).decode()
filename ,file_size = received.split(SEPARATOR)
# 獲取文件的名字,大小
filename = os.path.basename(filename)
file_size = int(file_size)
# 文件接收處理
progress = tqdm.tqdm(range(file_size), f'接收{filename}', unit='B', unit_divisor=1024, unit_scale=True)
with open('8_18_'+filename,'wb') as f:
for _ in progress:
# 從客戶端讀取數據
bytes_read = client_socket.recv(Buffersize)
# 如果沒有數據傳輸內容
if not bytes_read:
break
# 讀取寫入
f.write(bytes_read)
# 更新進度條
progress.update(len(bytes_read))
# 關閉資源
client_socket.close()
s.close()
if __name__ == '__main__':
received()到此,相信大家對“python怎么實現TCP文件接收和發送”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。