利用python写一个文件下载器的案例

工作中会用经常要到服务器下载文件或者其他数据,于是利用tcp协议写了一个文件下载案例:

1 服务器代码:

import socket
import os

if __name__ == "__main__":
    serves_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #socket绑定ip
    serves_socket.bind(("", 9080))
    #socket监听
    serves_socket.listen(128)
    #socket链接

    while True:
        client_socket, client_address = serves_socket.accept()
        #接shou数据
        recv_data = client_socket.recv(1024)
        recv_msg = recv_data.decode("utf-8")
        print(recv_msg)
        #查找是否存在文件
        if os.path.exists(recv_msg):
            #如果桌面存在这个文件
            with open(recv_msg, "rb") as f:
                while True:
                    file_content = f.read(1024)
                    if file_content:
                        client_socket.send(file_content)
                    else:
                        break

        #不存在则关闭这个客户端
        client_socket.close()
    serves_socket.close()



#人生苦短,我用python

2 客户端代码:

import socket
if __name__ == "__main__":

    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #连接的服务器
    client_socket.connect((input("请输入ip地址"), int(input("请输入端口号"))))
    #发送要查找的文件名字
    file_name = input("请输入要查找的文件名称")
    fil_data = file_name.encode("utf-8")
    client_socket.send(fil_data)

    str_list = []
    #接收返回来的数据
    while True:
        recv_file_data = client_socket.recv(1024)
        if recv_file_data:
            str_list.append(recv_file_data)
        else:
            break
    #写入文件
    if str_list:
        with open("../../" + file_name, "wb") as f:
            for file_content_b in str_list:
                f.write(file_content_b)
    else:
        print("您要下载的文件不存在的")
    client_socket.close()




客户端执行结果:
请输入ip地址192.168.243.130
请输入端口号9080
请输入要查找的文件名称1.txt

猜你喜欢

转载自blog.csdn.net/feilzhang/article/details/80173561