1. 程式人生 > >python用tcp實現區域網內檔案傳輸(文字,圖片,視訊)

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 版權宣告:本文為博主原創文章,轉載請附上博文連結!