From b2a6196dbb28e1ff76156f808c6536aa93d16fb7 Mon Sep 17 00:00:00 2001 From: recyvan Date: Tue, 26 Nov 2024 14:51:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Letter.py | 37 +++++++++++++++++- recv/recv_net.py | 41 +++++++++++--------- sender/sender_net.py | 92 ++++++++++++++++++++------------------------ 3 files changed, 101 insertions(+), 69 deletions(-) diff --git a/entity/Letter.py b/entity/Letter.py index 5f57d59..e90fde7 100644 --- a/entity/Letter.py +++ b/entity/Letter.py @@ -1,9 +1,44 @@ +import json + + class Letter: sign = "计算得到" encryptType = "SM4_GCM" - encryptKey = "计算获得" # recvPubKey 加密后的 对称加密秘钥 数据 + encryptKey = "计算获得" # recvPubKey 加密后的 对称加密秘钥 数据 recvPubKey = "" senderPubKey = "" fileName = "" fileBase64 = "" + + def to_dict(self): + return { + "sign": self.sign, + "encryptType": self.encryptType, + "encryptKey": self.encryptKey, + "recvPubKey": self.recvPubKey, + "senderPubKey": self.senderPubKey, + "fileName": self.fileName, + "fileBase64": self.fileBase64 + } + + + + +def json_to_obj(json_str): + new_obj= Letter() + new_obj.sign = json_str["sign"] + new_obj.encryptType = json_str["encryptType"] + new_obj.encryptKey = json_str["encryptKey"] + new_obj.recvPubKey = json_str["recvPubKey"] + new_obj.senderPubKey = json_str["senderPubKey"] + new_obj.fileName = json_str["fileName"] + new_obj.fileBase64 = json_str["fileBase64"] + return new_obj + +# test code +if __name__ == '__main__': + letter = Letter() + # print(json.dumps(letter.to_dict(), indent=1)) + json_dict = json.loads(json.dumps(letter.to_dict())) + print(json_dict.__dir__) diff --git a/recv/recv_net.py b/recv/recv_net.py index b6cc8af..86830c4 100644 --- a/recv/recv_net.py +++ b/recv/recv_net.py @@ -7,6 +7,10 @@ from time import sleep import select +from entity.Letter import Letter, json_to_obj +import recv +from sender import sender + # from entity.Letter import Letter @@ -23,7 +27,7 @@ import select # # 向目标ip和端口发送指定的信件 # pass -class recver(): +class recver_net(): def __init__(self): self.file_name = "" self.flle_size = 0 @@ -39,7 +43,7 @@ class recver(): data = conn.recv(10240) msg = json.loads(data.decode()) if int(msg['flag']) == 0: - print("\nhaved received data:"+msg["data"]+"\n") + print("\nhaved received data:" + msg["data"]) elif int(msg['flag']) == 1: self.recv_file(msg['data']) else: @@ -54,18 +58,18 @@ class recver(): msg = json.dumps(msg).encode("utf-8") self.send_data(conn, msg) elif flag == 1: - file_name = input("Enter file name to send: ") - self.send_file(conn, file_name) + # file_name = input("Enter file name to send: ") + self.send_file(conn) else: print("Error,plesae enter 0 to send data, or 1 to send file.") - def send_data(self, conn, data): conn.sendall(data) - def send_file(self, conn, file_name): - data = "dawwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - msg = {"flag": 1, "data": data} + def send_file(self, conn): + self.letter: Letter = sender.main() + letter = self.letter.to_dict() + msg = {"flag": 1, "data": letter} msg = json.dumps(msg).encode("utf-8") conn.sendall(msg) @@ -76,18 +80,25 @@ class recver(): return None # print(data.decode()) return data.decode() + + def recv_file(self, data): + print(data) + print("+++++++++++++++++++++++++++") + letter: Letter = json_to_obj(data) + recv.handleLetter(letter) + def main(self): while True: try: client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 client.connect(('127.0.0.1', 8424)) - print("Connected to recver.") + print("Connected...") print("if you want to send data, enter 0, if you want to send file, enter 1.") sleep(1) break except socket.error: - print("Waiting for recver...") + print("Waiting for ...") # 加入线程 threading.Thread(target=self.recver_thread, ).start() threading.Thread(target=self.send_thread, args=(client,)).start() @@ -95,14 +106,8 @@ class recver(): def run(self): threading.Thread(target=self.main).start() - def recv_file(self, data): - with open("3.txt", 'wb') as file: - print("Receiving file data...") - file.write(data) # 写入数据到文件 - print("File received successfully.") - # test if __name__ == '__main__': - a = recver() - a.run() \ No newline at end of file + a = recver_net() + a.run() diff --git a/sender/sender_net.py b/sender/sender_net.py index 15f59de..79ec71d 100644 --- a/sender/sender_net.py +++ b/sender/sender_net.py @@ -4,11 +4,13 @@ import selectors import socket import threading from time import sleep - +from entity.Letter import Letter,json_to_obj import select +import sender +from recv import recv -# from entity.Letter import Letter +# from entity.Letter import Letter # def main(): @@ -23,94 +25,84 @@ import select # # 向目标ip和端口发送指定的信件 # pass -class sender(): +class sender_net(): def __init__(self): - self.file_name="" - self.flle_size=0 - self.file_sha256="" - self.addr=("",0) - self.server=socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.letter = Letter() + self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.bind(('127.0.0.1', 8424)) self.server.listen(10) + def recver_thread(self): while True: conn, addr = self.server.accept() data = conn.recv(10240) - - msg=json.loads(data.decode()) + msg = json.loads(data.decode()) if int(msg['flag']) == 0: - print("\nhaved received data:"+msg["data"]+"\n") + print("\nhaved received data:" + msg["data"]) elif int(msg['flag']) == 1: self.recv_file(msg['data']) else: print("Error") - def send_thread(self,conn): + def send_thread(self, conn): while True: - flag:int=int(input()) - if flag==0: - data=input("Enter data to send: ") - msg={"flag":0,"data":data} - msg=json.dumps(msg).encode("utf-8") - self.send_data(conn,msg) - elif flag==1: - file_name=input("Enter file name to send: ") - self.send_file(conn,file_name) + flag: int = int(input()) + if flag == 0: + data = input("Enter data to send: ") + msg = {"flag": 0, "data": data} + msg = json.dumps(msg).encode("utf-8") + self.send_data(conn, msg) + elif flag == 1: + # file_name = input("Enter file name to send: ") + self.send_file(conn) else: print("Error,plesae enter 0 to send data, or 1 to send file.") - - - def send_data(self, conn, msg): conn.sendall(msg) - def send_file(self, conn, file_name): - data = "dawwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - msg={"flag":1,"data":data} - msg=json.dumps(msg).encode("utf-8") + + def send_file(self, conn): + self.letter: Letter = sender.main() + letter = self.letter.to_dict() + msg = {"flag": 1, "data": letter} + print(letter) + msg = json.dumps(msg).encode("utf-8") conn.sendall(msg) - def recv_data(self,conn): + def recv_data(self, conn): con, addr = conn.accept() data = con.recv(1024) if not data: return None # print(data.decode()) return data.decode() - # def recv_file(self,conn): - # con, addr = conn.accept() - # with open("3.txt", 'wb') as file: - # print("Receiving file data...") - # while True: - # # 接收数据块 - # data = con.recv(2048) - # if not data: - # break # 如果没有更多数据则退出循环 - # file.write(data) # 写入数据到文件 - # print("File received successfully.") - def recv_file(self,data): - with open("3.txt", 'wb') as file: - print("Receiving file data...") - file.write(data.encode("utf-8")) # 写入数据到文件 - print("File received successfully.") + + def recv_file(self, data): + letter: Letter = json_to_obj(data) + recv.handleLetter(letter) + + def run(self): threading.Thread(target=self.main).start() + def main(self): while True: try: client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 client.connect(('127.0.0.1', 8425)) - print("Connected to recver.") + print(" Connected...") print("if you want to send data, enter 0, if you want to send file, enter 1.") sleep(1) break except socket.error: - print("Waiting for recver...") + print("Waiting for ...") #加入线程 threading.Thread(target=self.recver_thread, ).start() - threading.Thread(target=self.send_thread,args=(client,)).start() + threading.Thread(target=self.send_thread, args=(client,)).start() + + #test if __name__ == '__main__': - a=sender() - a.run() \ No newline at end of file + a = sender_net() + a.run()