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()