Как соединиться, если неизвестен порт?
От: Toporkov  
Дата: 11.12.07 06:30
Оценка: :)
Задача следующая:
Сервер работает на неизвестной заранее машине и порт ему выделяется динамически из доступных,
клиенту при загрузке необходимо узнать ip и порт сервера, чтобы передавать данные.
ip можно получить с помощью широковещательного пакета

но как получить порт?

может быть, существуют другие решения относительно динамического выделения порта?
Re: Как соединиться, если неизвестен порт?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.12.07 06:48
Оценка:
Здравствуйте, Toporkov, Вы писали:

T>Задача следующая:

T>Сервер работает на неизвестной заранее машине и порт ему выделяется динамически из доступных,
T>клиенту при загрузке необходимо узнать ip и порт сервера, чтобы передавать данные.
T>ip можно получить с помощью широковещательного пакета

В каком смысле? Клиент пошлёт этот пакет, а сервер ответит? Или сервер оповестит о себе?

T>но как получить порт?


В пакете от сервера, конечно.:) Если клиент послал широковещательный запрос — в ответе сервера, иначе — в оповещении сервера. Адрес хоста ведь вы узнаёте — что мешает тому же для порта?

T>может быть, существуют другие решения относительно динамического выделения порта?


Например, внешняя служба регистрации (на постоянном адресе).
The God is real, unless declared integer.
Re[2]: Как соединиться, если неизвестен порт?
От: Toporkov  
Дата: 11.12.07 06:52
Оценка:
Здравствуйте, netch80, Вы писали:
N>В каком смысле? Клиент пошлёт этот пакет, а сервер ответит? Или сервер оповестит о себе?

Клиент пошлёт этот пакет, а сервер ответит

N>В пакете от сервера, конечно. Если клиент послал широковещательный запрос — в ответе сервера, иначе — в оповещении сервера. Адрес хоста ведь вы узнаёте — что мешает тому же для порта?


Но, как я понимаю, широковещательный запрос посылается на какой-то порт?

N>Например, внешняя служба регистрации (на постоянном адресе).


Не слышал. Поподробнее?
Re: Как соединиться, если неизвестен порт?
От: DOOM Россия  
Дата: 11.12.07 07:11
Оценка:
Здравствуйте, Toporkov, Вы писали:


T>может быть, существуют другие решения относительно динамического выделения порта?


Единственное разумное решение в такой ситуации — сделать аналогично RPC (хоть MS, хоть Sun, кому, что больше нравится). А именно — выделить отдельный сервис, который висит на фиксированном порту и по какому-либо идентификатору (например, GUID'у RPC интерфейса) выдает на каком порту сервис болтается.
Re: Как соединиться, если неизвестен порт?
От: McQwerty Россия  
Дата: 11.12.07 08:38
Оценка:
Здравствуйте, Toporkov, Вы писали:

T>Задача следующая:

T>Сервер работает на неизвестной заранее машине и порт ему выделяется динамически из доступных,
T>клиенту при загрузке необходимо узнать ip и порт сервера, чтобы передавать данные.
Как именно получается этот номер порта? Какой номер сервер передаёт в функцию bind?


T>ip можно получить с помощью широковещательного пакета

T>но как получить порт?
Сначала нужно понять, откуда берётся этот номер.

T>может быть, существуют другие решения относительно динамического выделения порта?

А какое решение сейчас используется?
Re[2]: Как соединиться, если неизвестен порт?
От: Toporkov  
Дата: 11.12.07 11:30
Оценка:
Здравствуйте, McQwerty, Вы писали:

MQ>Как именно получается этот номер порта? Какой номер сервер передаёт в функцию bind?

Передается 0
Re[3]: Как соединиться, если неизвестен порт?
От: McQwerty Россия  
Дата: 11.12.07 12:32
Оценка:
Здравствуйте, Toporkov, Вы писали:

MQ>>Как именно получается этот номер порта? Какой номер сервер передаёт в функцию bind?

T>Передается 0

После этого можно использовать getsockname для определения реального присвоенного номера. А вот чтобы передать его клиенту необходимо договориться о месте, откуда этот клиент сможет его получить.... Да, замкнутый круг получается...

Динамичность нужня для каких целей? Может попробовать биндиться к первому свободному из списка. Например, пробуем список 2000-2010. Если, скажем, 2007 оказался свободным, то на нём и висим. А клиент может перебирать по очереди 2000, 2001, ...
Re[4]: Как соединиться, если неизвестен порт?
От: Toporkov  
Дата: 11.12.07 12:50
Оценка:
Здравствуйте, McQwerty, Вы писали:
MQ>Динамичность нужня для каких целей? Может попробовать биндиться к первому свободному из списка. Например, пробуем список 2000-2010. Если, скажем, MQ>2007 оказался свободным, то на нём и висим. А клиент может перебирать по очереди 2000, 2001, ...

Динамичность для того, чтобы ничего не отваливалось
Хорошая идея, спасибо.
Re[4]: Как соединиться, если неизвестен порт?
От: Michael Chelnokov Украина  
Дата: 12.12.07 12:56
Оценка:
Здравствуйте, McQwerty, Вы писали:

MQ>Может попробовать биндиться к первому свободному из списка. Например, пробуем список 2000-2010. Если, скажем, 2007 оказался свободным, то на нём и висим. А клиент может перебирать по очереди 2000, 2001, ...


А если весь диапазон 2000-2010 оказался занят каким-то сервисом?
Не вижу у этого метода преимущества перед конфигурируемым значением порта, известным и клиенту и серверу, т.к. и в том и в другом случае порт (или диапазон) уже может быть занят. А оставлять возможность конфигурирования диапазона — это то же что и оставлять возможность конфигурирования одиночного порта, только непонятнее пользователям
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.