12 / 12 / 10
Регистрация: 04.06.2017
Сообщений: 99
|
||||||
1 | ||||||
Клиентские и серверные сокеты31.08.2017, 11:41. Показов 776. Ответов 3
После краткого ознакомления с сокетами по "Head first java" пытаюсь подключить клиента к серверу (в будущем хочу попробовать реализовать чат), но ничего не получается. Можете пояснить, почему метод accept блокирует потоки и программа "зависает"?
0
|
31.08.2017, 11:41 | |
Ответы с готовыми решениями:
3
Клиентские сертификаты Клиентские каналы Клиентские приложения Php сокеты и unix-сокеты |
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|
31.08.2017, 12:41 | 2 |
Потому что, вызывая метод accept, вы даете команду серверу ждать нового клиента. Пока нового клиента не будет, программа так и останется ждать на этом месте.
Если хотите, чтобы сервер мог параллельно жить своей жизнью и слушать порт, то вынесите ожидание в отдельный поток Добавлено через 1 минуту Таким образом вы не убедитесь, что клиент подконнектился. Даже если клиент на своей стороне закроет соединение, то с большой вероятностью на сервере, вызвав этот метод, вы получите true Добавлено через 59 секунд Как именно вы пытаетесь это сделать?
0
|
12 / 12 / 10
Регистрация: 04.06.2017
Сообщений: 99
|
||||||
31.08.2017, 12:46 [ТС] | 3 | |||||
Gr1f0nn, спасибо. Переписал код, теперь программа не "виснет". Меня интересует момент: почему это методом isConnected я не могу убедиться, что клиент подконнектился? Как тогда это сделать?
0
|
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
|
|
31.08.2017, 12:52 | 4 |
Собственно, само сообщение, что клиент подконнектился, вы можете выводить сразу после serverSocket.accept(); без проверки на isConnected();
https://docs.oracle.com/javase... Connected() Метод isConnected всегда будет возвращать true, если до этого клиент был успешно подключен к серверу. Даже если клиент уже давно отключился, на сервере все равно вы будете получать true. Для того, чтобы проверить подключение клиента, можно попробовать что-то считать из клиентского входного потока или что-то записать в клиентский выходной поток. В случае чтения из потока, вы получите -1, если клиент отключен. В случае записи - ошибку
0
|
31.08.2017, 12:52 | |
31.08.2017, 12:52 | |
Помогаю со студенческими работами здесь
4
Клиентские лицензии (CAL) Серверу не видны клиентские папки Клиентские принтеры подключены, но не печатают! Терминальный сервер и клиентские лицензии Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |