tcp文件發送和下載

import socket


def main():
    # 1. 創建套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2. 獲取服務器的ip port
    dest_ip = input("請輸入下載服務器的ip:")
    dest_port = int(input("請輸入下載服務器的port:"))

    # 3. 鏈接服務器
    tcp_socket.connect((dest_ip, dest_port))

    # 4. 獲取下載的文件名字
    download_file_name = input("請輸入要下載的文件名字:")

    # 5. 將文件名字發送到服務器
    tcp_socket.send(download_file_name.encode("utf-8"))

    # 6. 接收文件中的數據
    recv_data = tcp_socket.recv(1024)  # 1024--->1K  1024*1024--->1k*1024=1M 1024*1024*124--->1G

    if recv_data:
        # 7. 保存接收到的數據到一個文件中
        with open("[新]" + download_file_name, "wb") as f:
            f.write(recv_data)

    # 8. 關閉套接字
    tcp_socket.close()


if __name__ == "__main__":
    main()
import socket


def send_file_2_client(new_client_socket, client_addr):
    # 1. 接收客戶端 需要下載的文件名
    # 接收客戶端發送過來的 要下載的文件名
    file_name = new_client_socket.recv(1024).decode("utf-8")
    print("客戶端(%s)需要下載文件是:%s" % (str(client_addr), file_name))

    file_content = None
    # 2. 打開這個文件,讀取數據
    try:
        f = open(file_name, "rb")
        file_content = f.read()
        f.close()
    except Exception as ret:
        print("沒有要下載的文件(%s)" % file_name)


    # 3. 發送文件的數據給客戶端
    if file_content:
        # new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
        new_client_socket.send(file_content)



def main():
    # 1. 買個手機(創建套接字 socket)
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2. 插入手機卡(綁定本地信息 bind)
    tcp_server_socket.bind(("", 7890))

    # 3. 將手機設置爲正常的 響鈴模式(讓默認的套接字由主動變爲被動 listen)
    tcp_server_socket.listen(128)

    while True:
        # 4. 等待別人的電話到來(等待客戶端的鏈接 accept)
        new_client_socket, client_addr = tcp_server_socket.accept()

        # 5. 調用發送文件函數,完成爲客戶端服務
        send_file_2_client(new_client_socket, client_addr)

        # 6. 關閉套接字
        new_client_socket.close()
    tcp_server_socket.close()


if __name__ == "__main__":
    main()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章