Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
1-25794
Dina
2004-02-26 10:12
2004.03.09
Графически отобразить


4-25960
aser
2004-01-04 10:36
2004.03.09
как отловить завершение потока?


14-25886
Думкин
2004-02-16 06:01
2004.03.09
С днем рождения! 16 февраля.


3-25701
guest_Dmitry
2004-02-10 16:28
2004.03.09
MS Jet + XP - кривые руки или глюк?


7-25947
LordBTR
2003-12-17 11:51
2004.03.09
Группы пользователей домена





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский