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()
78 79 80
客戶端程式碼:
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)
# 計算位元組 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() --------------------- 作者:WangF0 來源:CSDN 原文:https://blog.csdn.net/wf134/article/details/78516148 版權宣告:本文為博主原創文章,轉載請附上博文連結!