TCP 文件下载

高级编程技巧 学习笔记

一、TCP 文件下载客户端


1.1、程序流程

  1. 创建套接字 连接服务器

  2. 要下载的文件名称

  3. 发送文件下载的请求

  4. 接收服务端发送过来的数据

  5. 保存文件

  6. 关闭套接字


1.2、代码实现

import socket


def main():
    # 创建TCP套接字
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 连接服务器    
    server_ip = input("server ip:")
    server_port = int(input("server port:"))
	tcp_client_socket.connect((server_ip , server_port))
	# 为了方便测试, 可以固定
    # tcp_client_socket.connect(('192.168.0.105', 7890))

    # 发送文件下载请求
    file_name = input('请输入文件名称:')
    tcp_client_socket.send(file_name.encode('gbk'))

    # 接收文件
    recv_data = tcp_client_socket.recv(1024*1024)

    if recv_data:
        # 保存文件
        with open('接收'+file_name, 'wb') as f:
            f.write(recv_data)

    recv_data = tcp_client_socket.recv(1024)
    print(recv_data.decode('gbk'))

    # 关闭套接字
    tcp_client_socket.close()


if __name__ == '__main__':
    main()



二、TCP 文件下载服务器


2.1、程序流程

  1. 创建套接字

  2. 绑定信息

  3. listen 主动变被动

  4. accept 等待客户端的链接

  5. 发送/接收


2.2、代码实现

import socket


def send_file_client(new_client_socket):
    # 接收客户端发送过来的数据(文件名)
    file_name = new_client_socket.recv(1024).decode()

    # 给个默认值, 防止文件不存在时报错, b 转为字节符
    content = b""
    try:
        with open(file_name, 'rb') as f:
            content = f.read()

        print("Down %s Final!" % file_name)

    # 文件不存在
    except:
        print("no download file:%s" % file_name)

    # 发送数据
    new_client_socket.send(content)
    new_client_socket.send("下载完成!".encode('gbk'))

    new_client_socket.close()


def main():
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    tcp_server_socket.bind(("", 7890))

    tcp_server_socket.listen(128)

    new_client_socket, client_addr = tcp_server_socket.accept()

    # 给客户端返回文件内容
    send_file_client(new_client_socket)

    tcp_server_socket.close()


if __name__ == '__main__':
    main()
发布了85 篇原创文章 · 获赞 0 · 访问量 1220

猜你喜欢

转载自blog.csdn.net/qq_43621629/article/details/104098769