layout/T7_server.py

97 lines
2.9 KiB
Python

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']
is_use_balance = header_dic['is_use_balance']
is_use_max = header_dic['is_use_max']
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, is_use_balance, is_use_max
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, is_use_balance, is_use_max = recvdata(myclient, os.path.join(basedir, 'example'))
layout = T7(recv_content, librarynum, is_use_balance, is_use_max)
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], sys.argv[3], sys.argv[4])
outputpath = layout.run()
else:
server()