Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Умная проверка занятых портов!!! 
V
    Опции темы
Viroman
Дата 18.9.2010, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Здравствуйте дорогие форумчане, прежде, чем бросать во все тяжкие, и посоветовать что либо, опишу конкретнее, что необходимо.
И так есть программа, которая должна отпрашивать, свободен ли порт и пытаться запустить внешнюю программу, как только порт будет занят, скажем так, пусть эта проверка происходит каждую секунду. Понятное дело, нельзя самому занимать порт, ибо его должна будет занять внешняя серверная программа, в том числе не нужно занимать и тут же высвобождать, ибо в это время есть риск, что внешняя программа не сможет занять корректно этот порт пока тот занят в целях проверки. Потому курсирующий здесь код не подходит. Нужно реально работающий быстро способ локально узнать, занят ли порт какой либо программой, или он свободен. Очень большая просьба, что код должен обязательно работать начиная с JAVA 1.3 ради обратной совместимости. Пожалуйста, помогите!!! Буду признателен за помощь!
PM MAIL   Вверх
pathfinder
Дата 19.9.2010, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: 1
Всего: 10



1) просто коннектиться на указанный порт, только не забыть поднастроить таймауты у коннекта.
2) использовать утилиты целевой системы(например netstat), и парсить их вывод.

PM MAIL   Вверх
Viroman
Дата 19.9.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Pathfinder, спасибо за ответ, про второе отметается, хотя идея неплохая, только каждую секунду метелить нетстат, не подобающе жирное самопожертвование smile
А первый метод, пожалуйста, дайте пример рабочий.
То есть мне не нужно коннектиться к этому порту как таковому, это сделает внешняя программа, которую я запускаю, но мне средствами java надо проверить, открыт ли порт или нет, при этом самому его не занимая, то есть если даже открыт, то принять это всего лишь как факт и запустить программу, которая будет к этому порту подключаться. Буду очень признателен.
PM MAIL   Вверх
pathfinder
Дата 19.9.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: 1
Всего: 10



Код

boolean connected = false;
Socket socket = null;

while (true) {
    try {
        socket = new Socket("ip_address", port);
        connected = true;
    } catch (UnknownHostException ex) {
        connected = false;
    } catch (IOException ex) {
        connected = false;
    }
    if (connected) {
        try {
            socket.close();
        } catch (IOException ex) {
            // pofigu ...
        }
        // System.exec(...);
        break;
    } else {
        try {
            Thread.sleep(500); // 0.5 sec
        } catch (InterruptedException ex) {
            break;
        }
    }
}

PM MAIL   Вверх
Viroman
Дата 19.9.2010, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Спасибо большое, только я как понимаю с таймаутом тут дело не вертися ;) а по умолчания он какой?
PM MAIL   Вверх
pathfinder
Дата 19.9.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: 1
Всего: 10



Если коннект не удалось установить, то спим пол секунды, и по новой пытаемся законнектится
Код

Thread.sleep(500); // 0.5 sec

PM MAIL   Вверх
Viroman
Дата 19.9.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Я это понял, не это меня интересовало, прежде чем слип станет действенным, предыдущая комманда должна завершиться, вот меня и интересовало, как долго тот ждёт, прежде чем уверенно завершит действие событием, что типа на порту нет ничего...
PM MAIL   Вверх
pathfinder
Дата 19.9.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: 1
Всего: 10



Поскольку все работает локально(и сервер, и клиент) то работать будет все на ура. Проверял для сотни подключений, среднее время не больше 5 мсек(на каждую попытку соединиться и соответственно определения был коннект или нет).

Таймауты на соединение оказывается установить нельзя(по крайней мере в доках ничего не нашел).


PM MAIL   Вверх
Viroman
Дата 19.9.2010, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Спасибо огромное за ответ ;)

ПС>тут нарыл как раз с таймаутами http://java.sun.com/developer/technicalArt...rking/timeouts/
В конце статьи зип архив с готовым исходником класса timedSocket
http://www.javaworld.com/jw-09-1999/timeou...-09-timeout.zip

Это сообщение отредактировал(а) Viroman - 19.9.2010, 21:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.