• Python socket上传文件的服务端和客户端实现


    Python socket上传文件的服务端和客户端实现 - 郭猛的个人空间 - 开源中国社区

    Python socket上传文件的服务端和客户端实现
    0人收藏此文章, 我要收藏 发表于1年前(2011-12-12 07:58) , 已有300次阅读 ,共3个评论

    代码均已测试:希望高人能指点一二

    服务端:

        #coding=gbk 
        '''''
        等待连接
        等待发送文件
        读取数据
        写入文件并且保存
        等待连接
        ''' 
        import socket 
        import threading 
        import time 
        import struct 
        def function(newsock, address): 
            FILEINFO_SIZE = struct.calcsize('128sI') 
            '''''定义文件信息(包含文件名和文件大小)大小。128s代表128个char[](文件名),I代表一个integer or long(文件大小)''' 
            while 1:      
                try: 
                    fhead = newsock.recv(FILEINFO_SIZE) 
                    filename, filesize = struct.unpack('128sI', fhead) 
                    '''''把接收到的数据库进行解包,按照打包规则128sI''' 
                    print "address is: ",address 
                    print filename, len(filename),type(filename) 
                    print filesize 
                    filename = 'new_'+filename.strip('\00')#命名新文件new_传送的文件 
                    fp = open(filename,'wb')#新建文件,并且准备写入 
                    restsize = filesize 
                    print "recving..." 
                    while 1: 
                        if restsize > 1024:#如果剩余数据包大于1024,就去1024的数据包 
                            filedata = newsock.recv(1024) 
                        else: 
                            filedata = newsock.recv(restsize) 
                            fp.write(filedata) 
                            break 
                        if not filedata: 
                            break 
                        fp.write(filedata) 
                        restsize = testsize - len(filedata)#计算剩余数据包大小 
                        if restsize <= : 
                            break 
                    fp.close() 
                    print "recv succeeded !!File named:",filename 
                except: 
                    print "he socket partner maybe closed" 
                    newsock.close() 
                    break 
        sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)#创建tcp连接 
        sock.bind(('127.0.0.1',8887))#定于端口和ip 
        sock.listen(5)#监听 
        while True: 
            newsock, address = sock.accept() 
            print "accept another connection" 
            tmpThread = threading.Thread(target=function,args=(newsock,address)) #如果接收到文件,创建线程 
            tmpThread.start()#执行线程 
        print 'end' 

    客户端:

        #coding=gbk 
        '''''
        输入文件名,并且上传
        ''' 
        import socket 
        import time 
        import struct 
        import os 
        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
        sock.settimeout(1) 
        e= 
        try: 
            sock.connect(('127.0.0.1',8887)) 
            print 'connect...' 
        except socket.timeout,e: 
            print 'timeout',e 
        except socket.error,e: 
            print 'error',e 
        except e: 
            print 'any',e 
        if not e: 
            while (1): 
                filename = raw_input('input your filename------->')#输入文件名 
                FILEINFO_SIZE = struct.calcsize('128sI')#编码格式大小 
                fhead = struct.pack('128sI',filename,os.stat(filename).st_size)#按照规则进行打包 
                sock.send(fhead)#发送文件基本信息数据 
                fp = open(filename,'rb') 
                while 1:        #发送文件 
                    filedata = fp.read(1024) 
                    if not filedata: 
                        break 
                    sock.send(filedata) 
                print "sending over..." 
                fp.close() 
  • 相关阅读:
    SpringBoot入门
    VUE 监听局部滚动 设置ICON的位置跟随
    手机端页面调试工具-vconsole使用
    js获取字符串字节的位数
    判断数据为[] {} /空数组或空对象
    Vue axios 上传图片
    Vue触发input选取文件点击事件
    腾讯地图添加多个Marker
    VUE-CLI 设置页面title
    小程序wxml文件引用方式
  • 原文地址:https://www.cnblogs.com/lexus/p/2843347.html
Copyright © 2020-2023  润新知