![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
koreyko, тебе не нужно получать доступ к чужому фрейму - это сам первый экземпляр программы слушает события на порту, и, получив сообщение от запущенного второго инстанса, разворачивает себя. Второй же экземпляр после получения сообщения тихо завершается.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
koreyko |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 20.4.2010 Репутация: нет Всего: нет |
batigoal, вы уверены? Потому что COVD писал, цитирую: "Когда вторая инстанс стартует, первая закрывается командой System.exit(0)"
|
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
koreyko, да, но выполняет-то этот System.exit сам инстанс, который будет выключен:
Программа получила сообщение и завершила себя. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
koreyko
У меня действительно так сделано, что при запуске второго инстанса он шлет команду первому инстансу и первый сам себя закрывает по этой команде. Я привел код, на основе которого вы можете реализовать свою логику, например, второй закрывается, а первый разворачивается. |
|||
|
||||
koreyko |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 20.4.2010 Репутация: нет Всего: нет |
COVD, еще раз спасибо. Разобрался, всё у меня получилось. Я раньше никогда не работал с сокетами и серверами, поэтому у меня осталась пара вопросов:
- что такое readTimeout, равный 2-м секундам и зачем он нужен? Насколько я понял, это диапазон, через который сервер слушает приходящие команды, или нет? Заметил такую ситуацию: если быстро запустить приложение 2 раза, то остаются запущенными две копии. Как с эти можно бороться? - каким образом надо выбирать диапазон портов? Если все они оказались до этого заняты другими процессами, то данное решение не сработает? Или же это порты относятся только к запущенному серверу и они всегда свободны? |
|||
|
||||
COVD |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Поток, читающий из сокета, блокируется, если нет данных (если сокет в блокирующем режиме). Таймаут на чтение определяет максимальное время ожидания данных. Если данных нет большее время, то выбрасывается исключение, и поток разблокируется. Это событие на принимающей стороне (на клиенте) означает, что коммуникация завершилась аварийно. Иначе поток может ожидать данных вечно. 2 сек - предполагается, что в локальной сети этого достаточно. Если обмен данных осуществляется через интернет, то обычно ставят секунд 15.
Очевидно, что второе запущенное приложение начинает поиск, а первое приложение еще не успело запустить свой сервер, так как тоже ищет. Можно попробовать поменять местами операции - сначала стартовать сервер, а потом искать в сети другие инстансы. И, наверное, надо передавать время старта в миллисек, чтобы инстансы могли понять, кто из них первый.
Если все порты из диапазона заняты, то не сработает (сервер не сможет стартовать). Если расширить диапазон, то увеличится время поиска. Я думаю, 5 - 10 портов вполне достаточно для этих целей. Мир не рухнет, если данное решение вдруг не сработает. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |