zoukankan      html  css  js  c++  java
  • 基于tcp协议的文件上传

    # client
    客户端
    # 基于tcp传输控制协议 Transmission Control protocol # 上传文件 # 1.通过socket实例化客户端对象client # 2.client连接connect 服务端ip+port 唯一地址与应用程序端口 # ipv4(0.0.0.0)-(255.255.255.255) # port(0-65535)8000之前默认 # flask框架:5000 # django框架:8000 # Mysql数据库:3306 # Redis数据库:6379 # arp协议:通过ip地址解析mac地址 # mac地址(前6:厂 后6:流水线) # # 上传文件先传报头 # 制作报头: # 将字典名file_dict通过json模块dumps转换json格式的字符串 # 而后点语法encode('utf-8')进行编码得到字节bytes格式 # 报头通过struct的 pack 'i'模式(固定4字节),通过内置函数len()得到编码后的字典长度 # # 通过实例化的client对象发送报头 # 通过实例化的client对象发送字典字节格式 import struct import socket import json import os client = socket.socket() client.connect(('127.0.0.1',8081)) file_size = os.path.getsize(r'C:Users86177Desktopwendang.txt') file_name = 'asb.txt' file_dict = { 'file_name':file_name, 'file_size':file_size, 'msg':'上传成功' } file_dict_bytes = json.dumps(file_dict).encode('utf-8') header = struct.pack('i',len(file_dict_bytes)) client.send(header) client.send(file_dict_bytes) import time time.sleep(10) with open(r'C:Users86177Desktopwendang.txt','rb') as f: for line in f: client.send(line)
    # server
    服务端

    import struct import socket import json import os server = socket.socket() server.bind(('127.0.0.1',8081)) server.listen(3) while True: conn,addr = server.accept() while True: try: header = conn.recv(4) if len(header) == 0:continue header_len = struct.unpack('i',header)[0] hender_bytes = conn.recv(header_len) hender_dict = json.loads(hender_bytes.decode('utf-8')) file_size = hender_dict.get('file_size') file_name = hender_dict.get('file_name') recv_size = 0 local = os.path.dirname(__file__) new_file = os.path.join(local,file_name) if not os.path.exists(new_file): with open(new_file,'wb')as f: while recv_size < file_size: dota = conn.recv(1024) f.write(dota) recv_size += len(dota) print(hender_dict.get('msg')) except ConnectionResetError as msg: print(msg) break conn.close()
  • 相关阅读:
    挑战程序设计竞赛 2.1 最基础的“穷竭搜索”
    HDU 5145 NPY and girls(莫队算法+乘法逆元)
    BZOJ 4300 绝世好题(位运算)
    HDU 5724 Chess(博弈论)
    BZOJ 1177 [Apio2009]Oil(递推)
    Codeforces 706D Vasiliy's Multiset(可持久化字典树)
    HDU 3374 String Problem (KMP+最小最大表示)
    POJ 2758 Checking the Text(Hash+二分答案)
    HDU 5782 Cycle(KMP+Hash)
    POJ 3450 Corporate Identity(KMP)
  • 原文地址:https://www.cnblogs.com/max404/p/10817136.html
Copyright © 2011-2022 走看看