一、文件传送步骤

  我们要利用socket来实现下载一个文件,该如何操作呢?

  服务端:

  1. 读取文件名
  2. 判断文件是否存在
  3. 检测文件大小(用于和客户端对比判断文件是否传送完毕)
  4. 发送文件大小给客户端
  5. 等待客户端确认(防止粘包)
  6. 打开文件
  7. 边读边发送数据
  8. md5验证

  客户端:

  • 发送命令
  • 接收文件大小
  • 返回确认
  • 获取文件名
  • 对比文件大小
  • 写入文件

二、功能实现(ftp下载功能)

  服务端:

# -*- coding: UTF-8 -*-
import os
import socket

# TCP/IP协议, tcp ,如果不填写就是默认这个
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind(('localhost', 9999))

server.listen()

while True:  # 可以接受多个客户端

    conn, addr = server.accept()
    print('new conn', addr)
    while True:

        cmd_res = conn.recv(1024)
        if not cmd_res:   # 防止当接受的客户端数据为空时,程序卡掉
            print('client has lost...')
            break
        else:
            # 获取命令和文件名
            cmd, filename = cmd_res.decode().split()
            print(cmd, filename)
            if os.path.isfile(filename):  # 判断文件是否存在
                # 文件大小
                file_size = os.stat(filename).st_size
                # 发送文件大小
                conn.send(str(file_size).encode(encoding='utf-8'))
                # 等待客户端确认
                conn.recv(1024)
                # 打开文件
                f = open(filename, 'rb')
                for line in f:
                    conn.send(line)
                    print('sending')
                f.close()
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-30
  • 2021-12-03
  • 2021-12-15
  • 2021-11-01
猜你喜欢
  • 2021-10-11
  • 2021-06-19
  • 2022-12-23
  • 2021-10-04
  • 2022-03-08
  • 2021-06-26
  • 2021-12-23
相关资源
相似解决方案