import json import os import socket import struct import sys from datetime import datetime from tools.common import basedir from tools.t7 import AutoLayout as T7 def recvdata(conn, path): """ 接受文件 :param conn: :param path: :return: """ header_size = struct.unpack('i', conn.recv(4))[0] header_bytes = conn.recv(header_size) header_json = header_bytes.decode('utf-8') header_dic = json.loads(header_json) content_len = header_dic['contentlen'] content_name = header_dic['contentname'] librarynum = header_dic['librarynum'] recv_len = 0 fielpath = os.path.join(path, '%s_%s' % (datetime.now().strftime("%m%d%H%M"), content_name)) file = open(fielpath, 'wb') while recv_len < content_len: correntrecv = conn.recv(1024 * 1000) file.write(correntrecv) recv_len += len(correntrecv) file.close() return fielpath, librarynum def senddata(conn, path, message=None): name = os.path.basename(os.path.realpath(path)) if not message: with open(path, 'rb') as file: content = file.read() headerdic = dict( contentlen=len(content), contentname=name ) headerjson = json.dumps(headerdic) headerbytes = headerjson.encode('utf-8') headersize = len(headerbytes) conn.send(struct.pack('i', headersize)) conn.send(headerbytes) conn.sendall(content) else: headerdic = dict( contentlen=len(path), contentname='message' ) headerjson = json.dumps(headerdic) headerbytes = headerjson.encode('utf-8') headersize = len(headerbytes) conn.send(struct.pack('i', headersize)) conn.send(headerbytes) conn.sendall(path.encode('utf-8')) def server(): myserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM) adrss = ("", 8191) myserver.bind(adrss) myserver.listen(5) # myclient, adddr = myserver.accept() # recv_content, chipnum = recvdata(myclient, os.path.join(basedir, 'example')) # layout = T7(recv_content, chipnum) # outputpath = layout.run() # senddata(myclient, outputpath) while True: try: myclient, adddr = myserver.accept() recv_content, librarynum = recvdata(myclient, os.path.join(basedir, 'example')) layout = T7(recv_content, librarynum) outputpath = layout.run() senddata(myclient, outputpath) except Exception as e: print(e) continue if __name__ == '__main__': if len(sys.argv) > 1: layout = T7(sys.argv[1], sys.argv[2]) outputpath = layout.run() else: server()