Вопрос про ServerSocket

 
+
-
edit
 

tarasv

опытный

Хочется странного - если сервер не знает заранее на каком порту он запустится то какие методы есть у клиента чтобы узнать это после запуска сервера?
Ну естественно кроме скана заранее согласованного между клиентом и сервером диапазона портов и запроса в каждый давший подконнектиться порт "Вася это ты?". Чешу в затылки но ничего путного в голову не приходит.
 
IL TheFreeMan #20.02.2008 02:44
+
-
edit
 

TheFreeMan

втянувшийся

Действительно странного... Как же Вася сможет послать письмо Пете, если Петя переезжает, и не знает своего нового адресса.

Этого в принципе нельзя сделать. На то он и сервер что бы свой порт знать.
В LANе еще можно UDP Broadcast заслать... А если WAN, то никак.
 
CA tarasv #20.02.2008 05:24  @TheFreeMan#20.02.2008 02:44
+
-
edit
 

tarasv

опытный

TheFreeMan> Действительно странного... Как же Вася сможет послать письмо Пете, если Петя переезжает, и не знает своего нового адресса.
TheFreeMan> Этого в принципе нельзя сделать. На то он и сервер что бы свой порт знать.
TheFreeMan> В LANе еще можно UDP Broadcast заслать... А если WAN, то никак.

Предположим что LAN, но что в таком случае дает UDP Broadcast? UDP листнер все одно на конкретном порту весеть должен а вдруг он занят?
 
+
-
edit
 

Mishka

модератор
★★★

Для этого и вводятся well known порты. Должеж на них и всё. А так — стандартно, через какого-нибудь агента — CORBA, или там страничку в вебсервере опубликует. А клиент прочитает и законектится к объявленному порту. А так броадкаст можно и на уровне эзера запустить. Только это всё костыли.
 
RU Dem_anywhere #23.02.2008 04:49
+
-
edit
 

Dem_anywhere

аксакал
★☆

> Предположим что LAN, но что в таком случае дает UDP Broadcast? UDP листнер все одно на конкретном порту весеть должен а вдруг он занят?
Ну и что, что занят? Можно повесить так, чтобы пакет получили все висящие на данном порту листенёры. И дальше уже сами разбирались, их пакет или нет.
Можно повесить так, чтобы принимать всё, что приходит по UDP, IP или вообще на интерфейс - как например netmon делает.
 

Mishka

модератор
★★★

Dem_anywhere> Ну и что, что занят? Можно повесить так, чтобы пакет получили все висящие на данном порту листенёры. И дальше уже сами разбирались, их пакет или нет.

В промискиус мод можно перевести, если есть права рута-администратора. Правда, здесь он не особо нужен. Но права всё равно нужны, т.к. это уровень ядра-драйвера. Но после этого надо будет по полной отрабатывать протокол TCP, UDP или SCP со всеми их прибабахами (это будет половина стека). Если хочется, то флаг в руки и якорь в попу.

Dem_anywhere> Можно повесить так, чтобы принимать всё, что приходит по UDP, IP или вообще на интерфейс - как например netmon делает.

Это ещё хуже. Т.к. надо будет знать, а не надо ли всякие ответы по всем протоколам держать. Да и существующие нетмоны на винде не перехватывают всякие сообщения на localhost-ах. Ну и ещё там проблемы почти у всех, два таких нетмона не могут сидеть вместе — теряют пакеты.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru