parent
d0473821b0
commit
f157855670
@ -0,0 +1,106 @@
|
|||||||
|
from socket import *
|
||||||
|
import struct
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
from PyQt5.QtCore import pyqtSignal, QObject
|
||||||
|
from RSA_Module import *
|
||||||
|
class TCPServer(QObject):
|
||||||
|
#定义信号
|
||||||
|
progress_updated = pyqtSignal(int)
|
||||||
|
def __init__(self, ip='127.0.0.1', port=8080, buffsize=1024):
|
||||||
|
super().__init__()
|
||||||
|
self.ip = ip
|
||||||
|
self.port = port
|
||||||
|
self.buffsize = buffsize
|
||||||
|
self.tcp_server = None
|
||||||
|
self.command = None
|
||||||
|
self.client_conn = False # 保存客户端连接
|
||||||
|
|
||||||
|
def run_server(self):
|
||||||
|
"""启动服务器"""
|
||||||
|
self.tcp_server = socket(AF_INET, SOCK_STREAM)
|
||||||
|
self.tcp_server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
|
||||||
|
self.tcp_server.bind((self.ip, self.port))
|
||||||
|
self.tcp_server.listen(5)
|
||||||
|
generate_rsakey('serverpub.pem', 'serverpri.pem')
|
||||||
|
|
||||||
|
|
||||||
|
def send_file(self, conn, filename, filesize_bytes, fileindex, ext):
|
||||||
|
"""发送文件给客户端"""
|
||||||
|
newfilename = os.path.basename(filename)
|
||||||
|
dirc = {
|
||||||
|
'filename': newfilename,
|
||||||
|
'filesize_bytes': filesize_bytes,
|
||||||
|
'fileindex': fileindex,
|
||||||
|
'fileext': ext,
|
||||||
|
}
|
||||||
|
head_info = json.dumps(dirc) # 将字典转换成JSON格式
|
||||||
|
head_info_len = struct.pack('i', len(head_info)) # 将字符串的长度打包
|
||||||
|
# 发送文件信息
|
||||||
|
conn.send(head_info_len) # 发送head_info的长度
|
||||||
|
conn.send(head_info.encode('utf-8'))
|
||||||
|
|
||||||
|
# 发送文件数据
|
||||||
|
with open(filename, 'rb') as f:
|
||||||
|
send_bytes = 0
|
||||||
|
while True:
|
||||||
|
data = f.read(1024)
|
||||||
|
if not data:
|
||||||
|
break
|
||||||
|
conn.sendall(data)
|
||||||
|
send_bytes += len(data)
|
||||||
|
progress = int((send_bytes / filesize_bytes) * 100)
|
||||||
|
self.progress_updated.emit(progress)
|
||||||
|
self.progress_updated.emit(100) # 确保进度条达到100%
|
||||||
|
|
||||||
|
def send_serverpub(self, server_conn):
|
||||||
|
filesize = os.path.getsize('./.tempfile/serverpub.pem')
|
||||||
|
newfilename = 'new_' + os.path.basename('./.tempfile/serverpub.pem')
|
||||||
|
dirc = {
|
||||||
|
'filename': newfilename,
|
||||||
|
'filesize': filesize,
|
||||||
|
}
|
||||||
|
head_info = json.dumps(dirc)
|
||||||
|
head_info_len = struct.pack('i', len(head_info))
|
||||||
|
server_conn.send(head_info_len) # 发送head_info的长度
|
||||||
|
server_conn.send(head_info.encode('utf-8'))
|
||||||
|
# 发送文件数据
|
||||||
|
with open('./.tempfile/serverpub.pem', 'rb') as f:
|
||||||
|
data = f.read()
|
||||||
|
server_conn.sendall(data)
|
||||||
|
|
||||||
|
def recv_clientpub(self, server_conn):
|
||||||
|
head_info_len = server_conn.recv(4)
|
||||||
|
head_info_len = struct.unpack('i', head_info_len)[0]
|
||||||
|
|
||||||
|
head_info = server_conn.recv(head_info_len)
|
||||||
|
dirc = json.loads(head_info.decode('utf-8'))
|
||||||
|
filename = dirc['filename']
|
||||||
|
filesize = dirc['filesize']
|
||||||
|
received_size = 0
|
||||||
|
with open(f'./.tempfile/{filename}', 'wb') as f:
|
||||||
|
while received_size < filesize:
|
||||||
|
if filesize - received_size > self.buffsize:
|
||||||
|
data = server_conn.recv(self.buffsize)
|
||||||
|
f.write(data)
|
||||||
|
received_size += len(data)
|
||||||
|
else:
|
||||||
|
data = server_conn.recv(filesize - received_size)
|
||||||
|
f.write(data)
|
||||||
|
received_size += len(data)
|
||||||
|
if received_size == filesize:
|
||||||
|
return True, filename
|
||||||
|
else:
|
||||||
|
return False, filename
|
||||||
|
|
||||||
|
def judge_send_status(self, conn):
|
||||||
|
judge_len = conn.recv(4)
|
||||||
|
if len(judge_len) == 4:
|
||||||
|
judge_len = struct.unpack('i', judge_len)[0]
|
||||||
|
judge = conn.recv(judge_len)
|
||||||
|
dirc = json.loads(judge.decode('utf-8'))
|
||||||
|
if not dirc['state']:
|
||||||
|
return False, dirc['fileindex']
|
||||||
|
else:
|
||||||
|
return True, dirc['fileindex']
|
||||||
|
|
Loading…
Reference in new issue