Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

Поиск сервера в подсети класса 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
6-25838
Shagrath
2004-01-03 14:20
2004.03.09
TServerSocket TClientSocket в Delphi7


1-25817
Maximus
2004-02-27 08:31
2004.03.09
Cемантический анализ текста


14-25862
PVOzerski
2004-02-17 13:02
2004.03.09
Можно ли через OLE и т. управлять сканирующей прогой Касперского


14-25932
alexsys
2004-02-14 08:54
2004.03.09
С праздником!


1-25760
Ш-К
2004-02-26 13:51
2004.03.09
Дин. массивы.