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()
  • 相关阅读:
    抓包工具 Fiddler 使用介绍
    HTTP 协议常见首部字段
    HTTP 协议服务器相关概念
    HTTP 协议常见的状态码
    HTTP 协议中 GET 和 POST 方法详解
    设置html title标题左侧的小图标
    HTML页面如何判断是手机访问还是电脑访问
    使用Java的Frame类编写的QQ登录界面
    swing中JTable的使用方法
    采用MVC模式JDBC演示案例
  • 原文地址:https://www.cnblogs.com/pyrene/p/6428215.html
Copyright © 2011-2022 走看看