Как закрыть TCP-соединение, не вызывая ошибки (клиент-сервер) - PullRequest
0 голосов
/ 23 марта 2019

У меня есть клиент с графическим интерфейсом, который подключается к серверу.Я попытался создать методы, позволяющие клиенту отключаться от сервера без возникновения ошибки, но я не могу заставить его работать.

Я пытался использовать 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] Существующее соединение было принудительно закрыто удаленным хостом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...