Я просто хочу добавить кое-что о внутренней работе сокетов (TCP), которую я знаю:
Все, что сервер и клиент делают, они отправляют фрагменты данных друг другу. Сервер отличается от клиента только тем, что он пассивен до тех пор, пока любой клиент не отправит сначала запрос на подключение. Но если клиент хочет или вынужден разорвать соединение, все, что нужно сделать, это остановить передачу данных на сервер . Чтобы изящно закрыть соединение, клиент может отправить специальные данные об этом событии, например сказать «Goodbay» по телефону, но это не обязательно. Просто представьте себе телефонный звонок от вас ( клиент ) на любую услугу ( сервер ). Вы начинаете разговор с "привет", и работник службы отвечает. Если вы случайно нажмете кнопку сброса на вашем телефоне, звонок будет потерян. Но сервис все равно продолжает свою работу. И вы можете сделать это снова. Ничего плохого из этого не происходит.
Все, что вам нужно, это стабильная и корректная клиент и сервер работают самостоятельно. Проверьте правильность отправки и получения данных. Попробуйте восстановить соединение, когда это необходимо от клиента . Если какое-то исключение выдается внутри client , оно должно быть обработано по мере необходимости, и его обычная ситуация, когда текущее соединение было потеряно из-за таких принудительных событий.
На все остальное уже ответил Реми Лебо .