From 0e7c9396a4a641ebd9e6863f134f5b40d6f61c01 Mon Sep 17 00:00:00 2001 From: recyvan Date: Sun, 24 Nov 2024 16:18:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=97=E5=8F=91=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- recv/recv.py | 108 ++++++++++++++++++++++------------------------- sender/sender.py | 40 ++++++++++++++---- 2 files changed, 83 insertions(+), 65 deletions(-) diff --git a/recv/recv.py b/recv/recv.py index a413c50..b786f7c 100644 --- a/recv/recv.py +++ b/recv/recv.py @@ -1,75 +1,82 @@ -from entity.Letter import Letter - - - - - - -def getLetter(): - # 阻塞自身 从指定端口获取信件 - # - # 解析信件 - letter = None - handleLetter(letter) - pass +import hashlib +import selectors +import socket +import threading +from time import sleep -def handleLetter(letter:Letter): - pass +import select +from entity.Letter import Letter -import socket -from entity.Letter import Letter -from socketserver import ThreadingTCPServer, StreamRequestHandler def main(): # 用户输入各种数据填充letter字段 # 获取用户的公私钥对进行签名 # 使用对方的公钥进行加密 # 发送信件 pass + + def sendLetter(letter: Letter, target="192.168.195.162:8426"): # 向目标ip和端口发送指定的信件 pass -class sender(StreamRequestHandler): - def handle(self): - conn: socket.socket = self.request - try: - while True: - data = conn.recv(1024) - if not data: - break - elif data.decode() == "quit": - break - elif data ==b'0': - self.recv_file() - # 解析信件 - msg = input("请输入要发送的消息(输入quit退出):") - self.send_data(conn,msg) - except Exception as e: - print(e) +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 run(self): + while True: + try: + client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 + client.connect(('127.0.0.1', 8424)) + print("Connected to seender") + sleep(1) + break + except socket.error as msg: + print("正在连接中...") + while True: + flag: int = int(input("Enter 0 or 1:")) + if flag == 1: + msg = input("[*]").strip() + if len(msg) == 0: continue + self.send_data(client, msg) + data = self.recv_data(self.server) + print("[*]", data.decode()) + elif flag == 3: + self.send_file(client, input("Enter file name: ")) + elif flag==0: + self.recv_file(self.server) + + client.close() def send_data(self, conn, data): conn.sendall(data.encode("utf-8")) def send_file(self,recver_socket,file_name): + file_name="C:\\Users\\a\\Desktop\\FileSecureTransfer\\recv\\1.txt" with open(file_name, 'rb') as file: recver_socket.sendall(file.read()) recver_socket.close() print("File sent successfully.") - def recv_data(self): - data = self.request.recv(1024) + def recv_data(self,conn): + data = conn.recv(1024) if not data: return None - print(data.decode()) + # print(data.decode()) return data.decode() - - def recv_file(self): + def recv_file(self,conn): + con,addr =conn.accept() with open("3.txt", 'wb') as file: print("Receiving file data...") while True: # 接收数据块 - data = self.request.recv(2048) + data = con.recv(2048) if not data: break # 如果没有更多数据则退出循环 file.write(data) # 写入数据到文件 @@ -77,18 +84,5 @@ class sender(StreamRequestHandler): #test if __name__ == '__main__': - # main() - server = ThreadingTCPServer(('127.0.0.1', 8425), sender) - server.serve_forever() - - - - - - - - - - - - + a=recver() + a.run() \ No newline at end of file diff --git a/sender/sender.py b/sender/sender.py index 3651773..b097ed9 100644 --- a/sender/sender.py +++ b/sender/sender.py @@ -2,6 +2,7 @@ import hashlib import selectors import socket import threading +from time import sleep import select @@ -27,37 +28,60 @@ class sender(): 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 run(self): - client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 - client.connect(('127.0.0.1', 8425)) + while True: + try: + client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 + client.connect(('127.0.0.1', 8425)) + print("Connected to recver.") + sleep(1) + break + except socket.error: + print("正在连接中...") while True: flag: int = int(input("Enter 0 or 1:")) if flag == 1: msg = input("[*]").strip() if len(msg) == 0: continue self.send_data(client, msg) - data = self.recv_data(client) + data = self.recv_data(self.server) print("[*]", data.decode()) elif flag == 0: - client.sendall(b'0') self.send_file(client, input("Enter file name: ")) + elif flag==3: + self.recv_file(self.server) client.close() def send_data(self, conn, data): conn.sendall(data.encode("utf-8")) - def send_file(self,recver_socket,file_name): + def send_file(self, conn, file_name): file_name="C:\\Users\\a\\Desktop\\FileSecureTransfer\\recv\\1.txt" with open(file_name, 'rb') as file: - recver_socket.sendall(file.read()) - recver_socket.close() + conn.sendall(file.read()) + conn.close() print("File sent successfully.") def recv_data(self,conn): - data = conn.recv(1024) + 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.") #test if __name__ == '__main__': a=sender()