发布时间:2019-08-02 11:04:18编辑:auto阅读(2011)
功能: 
可以利用python创建的TCP客户端从我们自己搭建的TCP服务器上下载文件. 
实现需求: 
安装socket模块 
简单了解sokcet模块用法
服务器代码如下:
import socket
def file_deal(file_name):
    # 定义函数用于处理用户索要下载的文件
    try:
        # 二进制方式读取
        files = open(file_name, "rb")
        mes = files.read()
    except:
        print("没有该文件")
    else:
        files.close()
        return mes
def main():
    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 固定端口号
    tcp_socket.bind(("",8888))
    # 将主动套接字转为被动套接字
    tcp_socket.listen(128)
    while True:
        # 利用accept获取分套接字以及客户端的地址
        client_socket,client_addr = tcp_socket.accept()
        # 接收客户端的数据
        file_name = client_socket.recv(4096)
        # 调用函数处理用户下载的文件
        mes = file_deal(file_name)
        if mes:
            # 如果文件不为空发送
            client_socket.send(mes)
        #关闭分套接字
        client_socket.close()
if __name__ == "__main__":
    main()
import socket
def file_deal(file_name):
    # 定义函数用于处理用户索要下载的文件
    try:
        # 二进制方式读取
        files = open(file_name, "rb")
        mes = files.read()
    except:
        print("没有该文件")
    else:
        files.close()
        return mes
def main():
    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 固定端口号
    tcp_socket.bind(("",8888))
    # 将主动套接字转为被动套接字
    tcp_socket.listen(128)
    while True:
        # 利用accept获取分套接字以及客户端的地址
        client_socket,client_addr = tcp_socket.accept()
        # 接收客户端的数据
        file_name = client_socket.recv(4096)
        # 调用函数处理用户下载的文件
        mes = file_deal(file_name)
        if mes:
            # 如果文件不为空发送
            client_socket.send(mes)
        #关闭分套接字
        client_socket.close()
if __name__ == "__main__":
    main()
客户端代码:
from socket import *
import os
def main():
    # 建立套接字
    tcp_socket = socket(AF_INET, SOCK_STREAM)
    # 接收用输入的服务器端的ip和端口
    tcp_ip = input("请输入ip:")
    tcp_port = int(input("请输入端口:"))
    # 连接服务器
    tcp_socket.connect((tcp_ip, tcp_port))
    # 输入要下载的文件名
    file_name = input("请输入要下载的文件名:")
    # 将文件名发送至服务器端
    tcp_socket.send(file_name.encode())
    # 创建一个空文件
    new_file = open(file_name, "wb")
    # 用与计算读取的字节数
    time = 0
    while True:
        # 接收服务器端返回的内容
        mes = tcp_socket.recv(4096)
        # 如果内容不为空执行
        if mes:
            # 解码并向文件内写入
            new_file.write(mes.decode())
            # 计算字节
            time += len(mes)
        else:
            # 如果字节数为空即未收到内容
            if time == 0:
                # 关闭文件
                new_file.close()
                # 删除刚刚创建的文件
                os.remove(file_name)
                print("没有您要下载的文件")
            else:
                # 如过time有值时name文件传输完成
                print("文件下载成功")
            break
    # 关闭套接字
    tcp_socket.close()
if __name__ == '__main__':
main() 
上一篇: Python资料整理
下一篇: Python开发规范及文件命名
 51245
 50682
 41282
 38103
 32566
 29467
 28330
 23192
 23156
 21485
 1558°
 2278°
 1886°
 1825°
 2137°
 1872°
 2559°
 4291°
 4147°
 2955°