У меня есть клиент с графическим интерфейсом, который подключается к серверу.Я попытался создать методы, позволяющие клиенту отключаться от сервера без возникновения ошибки, но я не могу заставить его работать.
Я пытался использовать shutdown, а затем закрывать методы socket.connection..
# Client side (GUI)
def On_Close(self): # When exit button is pressed on window
if messagebox.askokcancel("Quit", "Do you want to quit?"):
self.destroy()
def QUIT_Program(self): # When the tk button widget 'QUIT' is pressed
if messagebox.askyesno("QUIT","Are you sure want to quit?"): # Ensures the user can't accidentally quit the program
self.Data_Handler.Send_Q.put("QUIT")
self.Conn.shutdown(0)
self.Conn.close()
self.QUIT = True
self.destroy()
time.sleep(10)
sys.exit()
#Server side
if __name__ == "__main__":
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Sets up socket connection
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Configures socket options, such as re-use of ports
s.bind((HOST, PORT))
# Binds preset Host and Port values
s.listen(1)
# Listens for connections
while True:
try:
Conn, Addr = s.accept() # Accepts connections
connThread = Thread(target=Server, args=(Conn, Addr, DB_Conn, DB_Cursor))
# Sets up thread for the 'Server' object
connThread.start()
# Begins the thread
except Exception as err:
Error_Report(err, "NAME=MAIN")
Когда нажата кнопка выхода или мой самодельный виджет выхода, я хочу, чтобы соединение TCP между сервером и клиентом было закрыто без ошибок.
Что я на самом делеget is:
Traceback (последний вызов был последним): файл "C: \ Users \ Green \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ threading.py", строка 916, в_bootstrap_inner self.run ()
Файл "C: \ Users \ Green \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ threading.py", строка 864, в запуске self._target (* self._args, ** self._kwargs)
Файл "E: \ Python \ Py_Proj \ Project_Data_Handler_Class_v3.py", строка 65, в данных Func_Receiver = self.Get_Data ("Func_Receiver")
Файл«E: \ Python \ Py_Proj \ Project_Data_Handler_Class_v3.py», строка 60, в Get_Data Data_String = json.loads (self.master.Conn.recv (4096) .decode ())
ConnectionResetError: [WinError 10054] Существующее соединение было принудительно закрыто удаленным хостом