layout/server.py

90 lines
2.7 KiB
Python
Raw Normal View History

2023-06-27 13:01:44 +08:00
import socket
import struct
import json
import os
from datetime import datetime
2023-07-05 17:15:46 +08:00
from tools.common import basedir
from tools.t7 import AutoLayout as T7
from tools.novaplus import AutoLayout as NovaPlus
2023-06-27 13:01:44 +08:00
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']
2023-07-05 17:15:46 +08:00
select_type = header_dic['select_type']
2023-06-27 13:01:44 +08:00
recv_len = 0
2023-07-05 17:15:46 +08:00
fielpath = os.path.join(path, '%s_%s' % (datetime.now().strftime("%m%d%H%M"), content_name))
2023-06-27 13:01:44 +08:00
file = open(fielpath, 'wb')
while recv_len < content_len:
correntrecv = conn.recv(1024 * 1000)
file.write(correntrecv)
recv_len += len(correntrecv)
file.close()
2023-07-05 17:15:46 +08:00
return fielpath, select_type
2023-06-27 13:01:44 +08:00
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'))
2023-07-05 17:15:46 +08:00
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
2023-06-27 13:01:44 +08:00
2023-07-05 17:15:46 +08:00
if __name__ == '__main__':
server()