| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Работа с сетью > Закрытие клиентского сокета на сервере |
| Автор: Java2 10.8.2006, 18:36 | ||
| Народ, у меня на сервере есть клиентский сокет, который породил метод serverSocket.accept(); У меня есть сервер, который успешно работает. Вот его базовый код:
получается такая штука: если пользователь передаст серверу строку "exit", тогда соединение с клиентом успешно будет закрыто и сервер будет продолжать ожидать запросы от клиента, но если я просто прибиваю клиента, т.е. завершаю работу программы, к примеру, нажав ctrl + C в консоле, тогда сервер всё равно продолжит крутить цикл для клиентского сокета, не смотря на то, что клиента уже нет. Почему? |
| Автор: LSD 10.8.2006, 21:29 |
| Потому что сервер не знает что клиент, отсоединился. Единственный способ, это узнать это попытаться послать ему данные, тогда произойдет IOException. |
| Автор: batigoal 11.8.2006, 12:55 | ||
В моем понимании, это штатный режим работы сервера... |
| Автор: COVD2 11.8.2006, 15:22 | ||
Мониторить соединения клиентов отдельным потоком на сервере. |
| Автор: Java2 11.8.2006, 15:39 |
Пингуя каждый сокет? |
| Автор: COVD2 11.8.2006, 16:48 | ||
Можно регулярно посылать heartbeat - "пульс". Если соединение предполагает регулярный обмен данными, то можно просто паузы отслеживать и убивать соединение, в которых она достигла предела. В любом случае это дело творческое, поскольку причин много. Если данные перестают поступать, то вы не всегда сразу можете определить, что это - у клиента электричество отключили или временная задержка в интернете. |
| Автор: Java2 11.8.2006, 17:07 | ||
а как эти паузы сваять? |
| Автор: COVD2 11.8.2006, 17:34 |
| пауза - это разность между текущим временем и временем последнего запроса клиента, например. Поток - монитор может для каждого открытого соединения периодически ее вычислять. Клиенту можно поручить отправлять через равные промежутки времени запрос - "пульс", который для сервера только означает, что клиент и канал связи живы. |
| Автор: Danissimo 14.8.2006, 16:07 |
| На скока знаю, TCP протокол посылает heartbeats, кажется, каждые два часа. => как максимум через 2 часа принимающая сторона поймет, что соединение разорвано. |
| Автор: COVD2 14.8.2006, 16:29 | ||
|