博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的支持并发服务端(上传功能)
阅读量:5292 次
发布时间:2019-06-14

本文共 2083 字,大约阅读时间需要 6 分钟。

目录

简单的支持并发服务端(上传功能)

** 需要了解socketserver模块**

  • 服务端

    import socketserverimport structimport osfrom conf import settings#自己定义一个类,必须继承BaseRequestHandlerclass MyTcp(socketserver.BaseRequestHandler):    #必须重写handle方法    def handle(self):        try:            while True :  #通信循环                # 获取头的内容                dic_len_byte = self.request.recv(4)                if len(dic_len_byte)==0:                    return                print('有客户端连接进来了,地址如下', self.client_address)                print(self)                print(dic_len_byte)                #获取dic长度                dic_len = struct.unpack('i', dic_len_byte)[0]                print(dic_len)                dic_head = eval(self.request.recv(dic_len))                # 获取文件字节数和文件名                data = self.request.recv(dic_head['size'])                data_name = dic_head['name']                # print(data.decode('utf8'))                cloud_file_path = os.path.join(settings.cloud_db_path, data_name)                with open(cloud_file_path, 'wb') as fw:                    fw.write(data)        except Exception:            passif __name__ == '__main__':    #实例化得到一个tcp连接的对象,Threading意思是说,只要来了请求,它自动的开线程来处理连接跟交互数据    #第一个参数是绑定的地址,第二个参数传一个类    server=socketserver.ThreadingTCPServer(('127.0.0.1',8081),MyTcp)    #一直在监听    #这么理解:只要来一个请求,就起一个线程(造一个人,做交互)    server.serve_forever()
  • 客户端

    while True:        file_path=input('请输入文件路径按q退出>>>')        if file_path=='q':            break        # print(os.path.getsize(file_path))        file_name=file_path.split('\\')[-1]        data_head={'size':os.path.getsize(file_path),'name':file_name}        data_head_s=json.dumps(data_head)        data_head_bytes=data_head_s.encode('utf8')        # print(data_head_bytes)        #把头的长度以长度为4的字节发送过去        head_len_bytes=struct.pack('i',len(data_head_bytes))        client.send(head_len_bytes)        client.send(data_head_bytes)        print('正在上传',file_name)        with open(file_path,'rb') as fr:            data=fr.read()        client.send(data)        print('上传成功',file_name)

转载于:https://www.cnblogs.com/demiao/p/11493632.html

你可能感兴趣的文章
关于Vue的组件的通用性问题
查看>>
随机颜色值
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
目录相关的操作
查看>>
解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题...
查看>>
C++----练习--引用头文件
查看>>
11.基本包装类型
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
用HttpCombiner来减少js和css的请问次数
查看>>
FUSE-用户空间文件系统
查看>>
将tiff文件转化为jpg文件并保存
查看>>
ubuntu 16.04 开机脚本
查看>>
 VS2012 C#调用C++ dll
查看>>
TCL:表格(xls)中写入数据
查看>>
SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
查看>>
django 学习笔记(转)
查看>>
控制台程序秒变Windows服务(Topshelf)
查看>>
字节流与字符流的区别详解
查看>>