TCP完成文件下载器

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kun1280437633/article/details/80316543

tcp客户端

import socket

def main():
    """文件下载器的客户端逻辑"""
    # 创建TCP套接字
    tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 连接服务器
    server_addr = ('127.0.0.1', 1315)
    tcp_client.connect(server_addr)


    # 发送要下载的文件名
    download_file_name = input('请输入要下载的文件名:')
    tcp_client.send(download_file_name.encode('utf-8'))

    # 接收服务器发送的文件内容
    recv_data = tcp_client.recv(1024)
    print('客户端接收到的数据是:', recv_data)

    if recv_data:
        # 保存接收到的内容到文件里
        download_file = open('(新)'+download_file_name, 'wb')
        download_file.write(recv_data)
        download_file.close()
    else:
        print('服务器没有发送数据过来~')

    # 关闭套接字
    tcp_client.close()

if __name__ == '__main__':

    main()

tcp服务端

import socket

def server_client(client_soc):
    # 获取要下载的文件名
    file_name = client_soc.recv(1024)

    try:
        # 读取文件内容
        with open(file_name, 'rb') as file:
            content = file.read()
            # print('with最后一行:',file.closed)

        # print('with之后:', file.closed)  # with 打开的文件会自动关闭

        # 把文件内容发送给客户端
        client_soc.send(content)  # rb 模式读取到的就是二进制数据,可以直接发送
    except:
        print('无法打开文件 %s' % file_name)

    # 关闭客户端套接字
    client_soc.close()

def main():
    """文件下载器的服务器逻辑"""
    # 创建 TCP 套接字,并处理服务器的初始化
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server.bind(("", 1315))
    tcp_server.listen(128)

    # 获取客户端连接
    print('正在获取客户端连接~')
    client_soc, client_addr = tcp_server.accept()

    # 为新客户端提供服务
    server_client(client_soc)

    # 关闭服务器套接字
    tcp_server.close()

if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/kun1280437633/article/details/80316543