修复了断开重连失效bug

recyvan_2
recyvan 8 months ago
parent b2a673af0e
commit 2a470a47cf

@ -1,5 +1,6 @@
import hashlib import hashlib
import json import json
import queue
import selectors import selectors
import socket import socket
import threading import threading
@ -36,36 +37,54 @@ class recver_net():
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.bind(('0.0.0.0', self.port)) self.server.bind(('0.0.0.0', self.port))
self.server.listen(10) self.server.listen(10)
self.result_queue = queue.Queue()
self.FLAG = 0
def recver_thread(self): def recver_thread(self):
while True: while True:
conn, addr = self.server.accept() if self.FLAG == 0:
data = conn.recv(10240) try:
msg = json.loads(data.decode()) conn, addr = self.server.accept()
if int(msg['flag']) == 0: data = conn.recv(10240)
print("[+] haved received data:" + msg["data"]) msg = json.loads(data.decode())
elif int(msg['flag']) == 1: if int(msg['flag']) == 0:
self.recv_file(msg['data']) print("[+] haved received data:" + msg["data"])
elif int(msg['flag']) == 1:
self.recv_file(msg['data'])
else:
print("[x] Error")
except :
print("[x] Error")
self.FLAG = 1
return
else: else:
print("[x] Error") print("[x] loss connection with client,exiting...")
return
def send_thread(self, conn): def send_thread(self, conn):
while True: while True:
try: if self.FLAG == 0:
flag: int = int(input()) try:
if flag == 0: flag = input()
data = input("[-] Enter data to send: ") if flag == "0":
msg = {"flag": 0, "data": data} data = input("[-] Enter data to send: ")
msg = json.dumps(msg).encode("utf-8") msg = {"flag": 0, "data": data}
self.send_data(conn, msg) msg = json.dumps(msg).encode("utf-8")
elif flag == 1: self.send_data(conn, msg)
print("[+] Calling file transfer module...") elif flag == "1":
# file_name = input("Enter file name to send: ") print("[+] Calling file transfer module...")
self.send_file(conn) # file_name = input("Enter file name to send: ")
else: self.send_file(conn)
print("[x] Error,plesae enter 0 to send data, or 1 to send file.") else:
except ValueError: print("[x] Error,plesae enter 0 to send data, or 1 to send file.")
print("[x] Error, please enter a valid number.") except:
print("[x] Error,远程主机已将连接断开。正在尝试重连...")
self.FLAG = 1
return
else:
print("[x] lose connection with client,exiting...")
conn.close()
return
def send_data(self, conn, data): def send_data(self, conn, data):
conn.sendall(data) conn.sendall(data)
@ -89,8 +108,7 @@ class recver_net():
letter: Letter = json_to_obj(data) letter: Letter = json_to_obj(data)
recv.handleLetter(letter) recv.handleLetter(letter)
def main(self): def connect(self):
while True: while True:
try: try:
client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象 client = socket.socket() # 定义协议类型,相当于生命socket类型,同时生成socket连接对象
@ -101,9 +119,35 @@ class recver_net():
break break
except socket.error: except socket.error:
print("[*] Waiting for ...") print("[*] Waiting for ...")
# 加入线程 return client
threading.Thread(target=self.recver_thread, ).start() def main(self):
threading.Thread(target=self.send_thread, args=(client,)).start()
while True:
if self.FLAG == 0:
client = self.connect()
a = threading.Thread(target=self.recver_thread, )
a.start()
b=threading.Thread(target=self.send_thread, args=(client,))
b.start()
b.join()
elif self.FLAG == 1:
self.FLAG = 0
# # 加入线程
# if self.FLAG == 0:
# a=threading.Thread(target=self.recver_thread, )
# b=threading.Thread(target=self.send_thread, args=(client,))
# a.start()
# b.start()
# elif self.FLAG == 1:
# # 主动杀死线程a和b且不等待完成直接杀死
def run(self): def run(self):
threading.Thread(target=self.main).start() threading.Thread(target=self.main).start()

Loading…
Cancel
Save