就業DAY2_網絡編程_文件下載客戶端及服務器

import socketdef main():
    # 建立套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 獲取服務器的ip port
    dest_addr = input("請輸入服務器的ip:")
    dest_port = int(input("請輸入服務器的port:"))

    # 連接服務器
    tcp_socket.connect((dest_addr, dest_port))

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

    # 將文件名字發送到服務器
    tcp_socket.send(file.encode("gbk"))

    # 接收文件中的數據
    recv_data = tcp_socket.recv(1024)

    # 保存接收到的數據到一個文件中
    if recv_data:
        with open("復件" + file, "wb") as f:
            f.write(recv_data)
    # 關閉套接字
    tcp_socket.close()


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

def send_file_2_client(client_socket, client_addr):
    # 1 接收須要下載的文件名
    # 接收客戶端發送來的請求,接收客戶端發過來的文件名
    file_name = client_socket.recv(1024)
    print("客戶端%s發過來的文件名:%s" % (str(client_addr), file_name.decode("gbk")))

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

    # 3 發送文件的數據給客戶端
    if  file_content:
    # 回送一部分數據給客戶端
        client_socket.send(file_content)


def main():
    # 買個手機-建立tcp套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 插入手機卡-綁定
    tcp_socket.bind(("", 7890))

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

    while True:
        # 等待別人的電話到來(等待客戶端的連接 accept)
        client_socket, client_addr = tcp_socket.accept()

        # print(client_socket)
        print(client_addr)

        send_file_2_client(client_socket, client_addr)

        # 關閉套接字

        client_socket.close()
    tcp_socket.close()

if __name__ == "__main__":
    main()
相關文章
相關標籤/搜索