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()
  • 相关阅读:
    VS2013中using System.Windows.Forms;引用不成功
    <C#任务导引教程>练习五
    <C#任务导引教程>练习四
    <C#任务导引教程>练习三
    <C#任务导引教程>练习二
    printf("%d ",printf("%d",printf("%d",i)));
    <C#任务导引教程>练习一
    C代码
    SQLServer创建约束
    SQL语句修改字段类型与第一次SQLServer试验解答
  • 原文地址:https://www.cnblogs.com/pyrene/p/6428215.html
Copyright © 2011-2022 走看看