zoukankan      html  css  js  c++  java
  • 基于socket实现上传文件

    基于socket实现文件上传

    客户端代码:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    """
    这个是实现上传文件
    首先让客户端传递给服务端文件的大小,
    然后读取文件,之后发送给服务端
    """
    import os
    import socket
    obj = socket.socket()
    obj.connect(("127.0.0.1",111))
    
    #阻塞
    ret_bytes = obj.recv(1024)
    ret_str = str(ret_bytes,encoding="utf-8")
    print(ret_str)
    
    #发送当前文件大小
    size = os.stat("f.png").st_size
    obj.sendall(bytes(str(size),encoding="utf-8"))
    
    #发送文件
    with open("f.png","rb") as f:
        for line in f:
            obj.sendall(line)
    obj.close()

    服务端

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    """
    先接收客户端传递过来文件的大小
    之后开始读取文件,并且做一个判断,如果大小读取完毕之后关闭
    """
    import socket
    sk = socket.socket()
    sk.bind(("127.0.0.1",111))
    sk.listen()
    #连接客户端信息
    while True:
        conn,adress = sk.accept()#开始阻塞
        conn.sendall(bytes("welcome entry FTP",encoding="utf-8"))
        #先接收文件大小,然后开始接收客户端信息
        file_size = str(conn.recv(1024),encoding="utf-8")
        print(file_size)
        totle_size = int(file_size)
        #传递过来开始大小为0
        has_recv = 0
        #以二进制方式接收,因为sendall发送的是二进制文件
        f = open("new.png","wb")
        #接收文件内容,直到获取完毕
        while True:
            if totle_size == has_recv:
                break
            data = conn.recv(1024)
            f.write(data)
            has_recv = len(data)
        f.close()
  • 相关阅读:
    Linux下汇编语言学习笔记31 ---
    Linux下汇编语言学习笔记30 ---
    Linux下汇编语言学习笔记27 ---
    Linux下汇编语言学习笔记26 ---
    Linux下汇编语言学习笔记25 ---
    设计模式 关注点分离
    设计模式 关注点分离
    ALAsset和ALAssetRepresentation详解
    ALAsset和ALAssetRepresentation详解
    VIEW当中自定义属性的使用
  • 原文地址:https://www.cnblogs.com/pyrene/p/6428215.html
Copyright © 2011-2022 走看看