您好,登錄后才能下訂單哦!
怎么在python中利用tcp在局域網中傳輸文件?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
功能:
可以利用python創建的TCP客戶端從我們自己搭建的TCP服務器上下載文件。
實現需求:
安裝socket模塊
簡單了解sokcet模塊用法
服務器代碼如下:
import socket def file_deal(file_name): # 定義函數用于處理用戶索要下載的文件 try: # 二進制方式讀取 files = open(file_name, "rb") mes = files.read() except: print("沒有該文件") else: files.close() return mes def main(): # 創建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 固定端口號 tcp_socket.bind(("",8888)) # 將主動套接字轉為被動套接字 tcp_socket.listen(128) while True: # 利用accept獲取分套接字以及客戶端的地址 client_socket,client_addr = tcp_socket.accept() # 接收客戶端的數據 file_name = client_socket.recv(4096) # 調用函數處理用戶下載的文件 mes = file_deal(file_name) if mes: # 如果文件不為空發送 client_socket.send(mes) #關閉分套接字 client_socket.close() if __name__ == "__main__": main() import socket def file_deal(file_name): # 定義函數用于處理用戶索要下載的文件 try: # 二進制方式讀取 files = open(file_name, "rb") mes = files.read() except: print("沒有該文件") else: files.close() return mes def main(): # 創建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 固定端口號 tcp_socket.bind(("",8888)) # 將主動套接字轉為被動套接字 tcp_socket.listen(128) while True: # 利用accept獲取分套接字以及客戶端的地址 client_socket,client_addr = tcp_socket.accept() # 接收客戶端的數據 file_name = client_socket.recv(4096) # 調用函數處理用戶下載的文件 mes = file_deal(file_name) if mes: # 如果文件不為空發送 client_socket.send(mes) #關閉分套接字 client_socket.close() if __name__ == "__main__": main()
客戶端代碼:
from socket import * import os def main(): # 建立套接字 tcp_socket = socket(AF_INET, SOCK_STREAM) # 接收用輸入的服務器端的ip和端口 tcp_ip = input("請輸入ip:") tcp_port = int(input("請輸入端口:")) # 連接服務器 tcp_socket.connect((tcp_ip, tcp_port)) # 輸入要下載的文件名 file_name = input("請輸入要下載的文件名:") # 將文件名發送至服務器端 tcp_socket.send(file_name.encode()) # 創建一個空文件 new_file = open(file_name, "wb") # 用與計算讀取的字節數 time = 0 while True: # 接收服務器端返回的內容 mes = tcp_socket.recv(4096) # 如果內容不為空執行 if mes: # 解碼并向文件內寫入 new_file.write(mes.decode()) # 計算字節 time += len(mes) else: # 如果字節數為空即未收到內容 if time == 0: # 關閉文件 new_file.close() # 刪除剛剛創建的文件 os.remove(file_name) print("沒有您要下載的文件") else: # 如過time有值時name文件傳輸完成 print("文件下載成功") break # 關閉套接字 tcp_socket.close() if __name__ == '__main__': main()
看完上述內容,你們掌握怎么在python中利用tcp在局域網中傳輸文件的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。