diff --git a/recv/recv_net.py b/recv/recv_net.py new file mode 100644 index 0000000..b6cc8af --- /dev/null +++ b/recv/recv_net.py @@ -0,0 +1,108 @@ +import hashlib +import json +import selectors +import socket +import threading +from time import sleep + +import select + + +# from entity.Letter import Letter + + +# def main(): +# # 用户输入各种数据填充letter字段 +# # 获取用户的公私钥对进行签名 +# # 使用对方的公钥进行加密 +# # 发送信件 +# pass +# +# +# def sendLetter(letter: Letter, target="192.168.195.162:8426"): +# # 向目标ip和端口发送指定的信件 +# pass + +class recver(): + 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.server.bind(('127.0.0.1', 8425)) + self.server.listen(10) + + def recver_thread(self): + while True: + conn, addr = self.server.accept() + data = conn.recv(10240) + msg = json.loads(data.decode()) + if int(msg['flag']) == 0: + print("\nhaved received data:"+msg["data"]+"\n") + elif int(msg['flag']) == 1: + self.recv_file(msg['data']) + else: + print("Error") + + 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) + 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} + msg = json.dumps(msg).encode("utf-8") + conn.sendall(msg) + + 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 main(self): + + while True: + try: + client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 + client.connect(('127.0.0.1', 8424)) + print("Connected to recver.") + 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...") + # 加入线程 + threading.Thread(target=self.recver_thread, ).start() + threading.Thread(target=self.send_thread, args=(client,)).start() + + 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 diff --git a/sender/sender_net.py b/sender/sender_net.py new file mode 100644 index 0000000..15f59de --- /dev/null +++ b/sender/sender_net.py @@ -0,0 +1,116 @@ +import hashlib +import json +import selectors +import socket +import threading +from time import sleep + +import select + +# from entity.Letter import Letter + + + +# def main(): +# # 用户输入各种数据填充letter字段 +# # 获取用户的公私钥对进行签名 +# # 使用对方的公钥进行加密 +# # 发送信件 +# pass +# +# +# def sendLetter(letter: Letter, target="192.168.195.162:8426"): +# # 向目标ip和端口发送指定的信件 +# pass + +class sender(): + 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.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()) + if int(msg['flag']) == 0: + print("\nhaved received data:"+msg["data"]+"\n") + elif int(msg['flag']) == 1: + self.recv_file(msg['data']) + else: + print("Error") + + 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) + 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") + conn.sendall(msg) + + 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 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("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...") + #加入线程 + threading.Thread(target=self.recver_thread, ).start() + threading.Thread(target=self.send_thread,args=(client,)).start() +#test +if __name__ == '__main__': + a=sender() + a.run() \ No newline at end of file