From 57178df8778582235ccf3b4eff9d915f26ad230d Mon Sep 17 00:00:00 2001 From: recyvan Date: Sun, 24 Nov 2024 15:47:05 +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 | 84 +++++++++++++++++++++++++++++++++++++++++++++++- sender/sender.py | 53 ++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+), 1 deletion(-) diff --git a/recv/recv.py b/recv/recv.py index d0c8c31..a413c50 100644 --- a/recv/recv.py +++ b/recv/recv.py @@ -1,5 +1,10 @@ from entity.Letter import Letter + + + + + def getLetter(): # 阻塞自身 从指定端口获取信件 # @@ -9,4 +14,81 @@ def getLetter(): pass def handleLetter(letter:Letter): - pass \ No newline at end of file + pass + + +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) + + def send_data(self, conn, data): + conn.sendall(data.encode("utf-8")) + def send_file(self,recver_socket,file_name): + 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) + if not data: + return None + print(data.decode()) + return data.decode() + + def recv_file(self): + with open("3.txt", 'wb') as file: + print("Receiving file data...") + while True: + # 接收数据块 + data = self.request.recv(2048) + if not data: + break # 如果没有更多数据则退出循环 + file.write(data) # 写入数据到文件 + print("File received successfully.") + +#test +if __name__ == '__main__': + # main() + server = ThreadingTCPServer(('127.0.0.1', 8425), sender) + server.serve_forever() + + + + + + + + + + + + diff --git a/sender/sender.py b/sender/sender.py index 30aad6c..3651773 100644 --- a/sender/sender.py +++ b/sender/sender.py @@ -1,11 +1,64 @@ +import hashlib +import selectors +import socket +import threading + +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) + def run(self): + client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 + client.connect(('127.0.0.1', 8425)) + 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) + print("[*]", data.decode()) + elif flag == 0: + client.sendall(b'0') + self.send_file(client, input("Enter file name: ")) + + 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,conn): + data = conn.recv(1024) + if not data: + return None + # print(data.decode()) + return data.decode() +#test +if __name__ == '__main__': + a=sender() + a.run() \ No newline at end of file