![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Proger10 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Ситуация такая. Есть прога, в которой я устанавливаю серверный сокет на определённый порт:
Если прога принудительно закрыть и тут же запустить, этот код поймает экзепшн. Наверное потому, что порт этот ещё занят. Смотрю через netstat иногда он действительно занят своим "высвобождением":
но иногда совсем пусто:
А на сокет "сесть" у сервера также не получается. Это редко. Чаще всё отлично срабатывает. Но иногда.. В общем, не радует. Как бороться с такой ситуацией? Использовать второй резервный порт? (пока этот освобождается, передача пойдёт по другому. как освободился - так можно и этот использовать..). Или ждать его освобождения? Есть ли ещё какие-то методы борьбы с этим? Или есть какие-то методы, позволяющие принудительно освободить порт? Хотя какие там нафиг методы, так можно было бы все порты повосвобождать Вообще, я всегда после работы закрываю сокеты по close() методам. Закрываю всё что только можно закрыть. Это сообщение отредактировал(а) Proger10 - 1.5.2009, 00:24 |
||||||
|
|||||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 3 Всего: 73 |
Proger10,
А что Вы понимаете под "принудительно закрыть"? kill? Если да - то подобное поведение сокета вполне возможно. Сделайте способ грамотно закрыть программу с закрытием всех открытых соединений. -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Сделал уже Я же говорил, если рубануть прогу Хотя, впрочем, когда она работает и требуется подряд создать сессий пять.. Т.е. поднимаем серверный сокет, коннектим клиента, тут же обмениваемся данными и закрываем, и так далее с интервалом в 1-5 секунд. То иногда не успевает закрыться сокет. Хотя я закрываю там всё только, что возможно А как сделать kill сокета? Может я прибегну к таким экстремальным мерам.. Просто не представляю как сделать kill кроссплатформенно, не привязываясь к платформе.. Можно ли так вообще как-то сделать? Это сообщение отредактировал(а) Proger10 - 1.5.2009, 00:37 |
|||
|
||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 3 Всего: 73 |
Хм... А код можете привести, как Вы это делаете? Это сообщение отредактировал(а) Vasay - 1.5.2009, 00:57 -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Какой-то странный сценарий. Зачем закрывать серверный сокет. Почему он не может быть открыт всегда, как это обычно делается? Это сообщение отредактировал(а) COVD - 1.5.2009, 05:05 |
|||
|
||||
| Proger10 |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Хм, и действительно.. Код у меня огромный, поэтому не хотелось бы выкладывать его сюда. Сейчас я пытаюсь один раз встать на прослушивание порта и далее аксептить клиентские сокеты (после ответа от клиента, клиент закрывает свой сокет (нет смысла его дальше держать) ). Основная проблема вот здесь:
Перед каждым коннектом клиента, на сервере я проверяю серверную готовность: checkServerSocket() и что самое интересное, после первого прохода (принятия и закрытия (обработки короче) клиента, постоянно - то serverSocket == null, то вообще не может прослушать его (экзепшн).. Далее на сервере у меня:
Первый раз оно проходит успешно, со второго раза начинаются всякие проблемы, которые я описал выше. Что там после прохода у меня.. Клиент после передачи данных закрывает сокет вот так:
сервер закрывает просто сокет: socket.close() (не serverSocket!). Но вроде я не закрываю прослушивание порта.. а оно закрывается. А разве должно? В общем почему-то порт закрывается Добавлено через 6 минут и 18 секунд Кстати, а по какой причине у меня может срабатывать: "if ( serverSocket == null ) {" и при этом невозможность прослушивания порта..? Это сообщение отредактировал(а) Proger10 - 1.5.2009, 13:06 |
||||||||||
|
|||||||||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
удалено
Это сообщение отредактировал(а) Proger10 - 1.5.2009, 15:54 |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Проблема решена!
Оказалось у меня маленько запутанная структура, что подзабыл где какие нити создаются Это сообщение отредактировал(а) Proger10 - 1.5.2009, 15:55 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Но вы все же посмотрите пример простейшего сервера на основе пула потоков здесь
http://java.sun.com/j2se/1.5.0/docs/api/ja...torService.html Это сообщение отредактировал(а) COVD - 1.5.2009, 16:44 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |