90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
|
|
import socket
|
||
|
|
import struct
|
||
|
|
import json
|
||
|
|
import os
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
from tools.common import basedir
|
||
|
|
|
||
|
|
from tools.t7 import AutoLayout as T7
|
||
|
|
from tools.novaplus import AutoLayout as NovaPlus
|
||
|
|
|
||
|
|
|
||
|
|
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']
|
||
|
|
select_type = header_dic['select_type']
|
||
|
|
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, select_type
|
||
|
|
|
||
|
|
|
||
|
|
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)
|
||
|
|
while True:
|
||
|
|
try:
|
||
|
|
myclient, adddr = myserver.accept()
|
||
|
|
recv_content, select_type = recvdata(myclient, os.path.join(basedir, 'example'))
|
||
|
|
if select_type == 'nova':
|
||
|
|
layout = NovaPlus(recv_content, data_limit=800)
|
||
|
|
elif select_type == 'xplus':
|
||
|
|
layout = NovaPlus(recv_content, data_limit=400)
|
||
|
|
else:
|
||
|
|
layout = T7(recv_content, data_limit=1520)
|
||
|
|
outputpath = layout.run()
|
||
|
|
senddata(myclient, outputpath)
|
||
|
|
except Exception as e:
|
||
|
|
print(e)
|
||
|
|
continue
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
server()
|