Форум: "Сети";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];
ВнизПоиск сервера в подсети класса C Найти похожие ветки
← →
Unknown (2003-12-30 12:18) [0]Человеки!
Помогите решить проблему:
Есть подсеть класса C. Нужно найти в ней сервер.
Перебор всей подсети занимает много времени (синхронный сокет).
Каким образом можно повысить скорость его работы?
← →
Digitman (2003-12-30 12:31) [1]
> Каким образом
никаким.
невозможно разом протолкнуть корабельный канат сквозь игольное ушко, кроме как разделать канат на нитки и протолкнуть последовательно каждую в отдельности
точно так же и транспорт определенного сетевого интерфейса имеет вполне определенную (максимально возможную по разным причинам в дан.момент времени при дан.конфигурации оборудования/софта) пропускную способность
← →
Verg (2003-12-30 12:44) [2]
> Каким образом можно повысить скорость его работы?
Создать 253 потока, в каждом по сокету. Каждый поток проверит свой IP адрес... Думаю, что скорость поиска сервера будет близка к теоритическому максимуму.
← →
Unknown (2003-12-30 13:00) [3]Вообще, насчет потоков -- это стандартный подход.
Замечание про канат -- это вообще оффтопик. Вопрос был не про пропускную способность сети, а про большое время ответа отдельно взятого компа.
Кстати, возможно ли это если известен порт сервера (он даже открыт).
← →
Digitman (2003-12-30 13:04) [4]
> про большое время ответа отдельно взятого компа
офф-топик, говоришь ?
любопытно, как ты намерен "заставить" ответить "комп" быстрее, чем он может это сделать в принципе ?) И как ты намерен, даже если "комп ответил" мгновенно, заставить свой сет.интерфейс получить ответные пакеты быстрей, чем это возможно при данном текущем сет.траффике ?
← →
Rouse_ (2003-12-30 13:08) [5]> [3] Unknown (30.12.03 13:00)
Оффтопик или нет - это решает модератор...
По сабжу:
Обычно поиск сервера решается посылкой броадкаст датаграммы на которую сервер должен ответить...
Если этот способ не подходит - читай Digitman © (30.12.03 12:31)
С Наступающим...
← →
Sha (2003-12-30 13:12) [6]Digitman © (30.12.03 13:04) [4]
Как я понял, автору надо перебрать все компы подсети
как можно быстрее, а не ускорить ответ отдельного компа.
← →
Unknown (2003-12-30 13:14) [7]Комп ответить быстрее, конечно, не может (хотя если есть нормальный админ, то это спорный вопрос). А вот кто мешает коннектиться асинхронно. Пропускная способность сети сдесь ни при чем.
Я не думаю, что парочка пакетов не может загрузить 100 Mb сеть.
← →
Verg (2003-12-30 13:40) [8]
> Unknown (30.12.03 13:14) [7]
> Комп ответить быстрее, конечно, не может (хотя если есть
> нормальный админ, то это спорный вопрос). А вот кто мешает
> коннектиться асинхронно.
Никто не мешает.
А в чем вопрос тогда вообще? Я не понял.
Или думаешь, что аснихронный или неблокирующий режим сокета - это "нестандартный подход"?
:)
← →
Sha (2003-12-30 13:42) [9]Удалено модератором
Примечание: Оффтоп...
← →
Digitman (2003-12-30 15:58) [10]
> Комп ответить быстрее, конечно, не может
начнем с того, что отвечает не "комп", а цепочка ПО, состоящая из прикладного и системного уровня
← →
UnKnown (2003-12-31 10:54) [11]Удалено модератором
Примечание: Как ты и сказал, не будем засорять ...
← →
Alex Konshin (2003-12-31 11:01) [12]Выбран неправильный подход.
Посылай броадкастом UDP и пусть сервер сам отвечает.
← →
Digitman (2003-12-31 11:37) [13]
> просил на вопрос ответить
тебе и ответ был : никак, если режим транспорта синхронный и делается твой "перебор" в одном-единственном кодовом потоке
либо задействуй асинхр.режим либо выноси "опрос" сразу нескольких хостов в доп.код.потоки
вопрос-то был абстрактный ! перебор перебору - рознь)
← →
UnKnown (2004-01-01 00:51) [14]Спасибо за абстрактный ответ.
Где можно подробнее узнать про "посылку броадкастом UDP".
Подскажи адресок.
← →
Alex Konshin (2004-01-01 04:06) [15]А ты поищи, тут этот вопрос почти раз в день задают.
← →
UnKnown (2004-01-01 13:08) [16]Большое спасибо за дельный совет.
Сервер находится буквально сразу.
Только получается одна фигня: если отправить датаграмму по 255.255.255.255, то она вообще не доходит.
Я решил эту проблему перебором первого байта от 1 до 255, исключая 127. Так как при маске 127.255.255.255 функция recvfrom() вешает программу. (Она ждет ответа, хотя сервер на 127.0.0.1 не запущен. Не пойму почему функция sendto не возвращает ошибку).
Может кто-нибудь поможет с этой фигней справится, хотя меня устраивает и этот вариант, но все-таки как-то несолидно.
Хотелось бы узнать почему так происходит.
← →
Rouse_ (2004-01-01 14:28) [17]Перед отправкой броадкаст датаграммы первоначально сделай
Option := True;
SetSockOpt(FSocket, SOL_SOCKET, SO_BROADCAST, PChar(@Option), SizeOf(Option));
А после этого смело шли на 255.255.255.255
Желаю успехов в новом году
← →
Rouse_ (2004-01-01 14:31) [18]и забыл
FSockAddr: TSockAddrIn;
...
FSockAddr.sin_addr.S_addr := INADDR_BROADCAST;
у клиента...
← →
Sha (2004-01-02 11:22) [19]Удалено модератором
← →
Rouse_ (2004-01-02 12:33) [20]Удалено модератором
← →
Sha (2004-01-02 16:32) [21]Удалено модератором
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c