Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];




Вниз

Поиск сервера для TClientSocket 


Vaddya   (2001-09-06 00:27) [0]

Как можно найти запущенный сервер в сети, сделанный на основе TServerSocket, по типу того, как это делают сетевые игры (без указания Address или Host)?



Борис   (2001-09-06 09:05) [1]

Получаешь список машин в сети, и пробуешь подсоедениться к каждой, если подцепился, значит серевер. Помойму так. С уважением, Борис



SKiwa   (2001-09-06 10:53) [2]

Более корректно так.
Посылаешь Broadcast на определенный порт
формат запроса и ответа должен быть четко определен.
А в ответе могут быть параметры для TCP.
Для всего этого лучше использовать компоненты Indy
там есть и UDP-клиент и UDP-сервер и возможность посылать Broadcast
Да и TCP лучше брать там же.



SKiwa   (2001-09-06 11:07) [3]

Если никто не возражает, я расширю вопрос :)
В данный момент работаю над тем-же.

для TIdUDPClient
procedure Broadcast(const AData: string; const APort: integer);
т.е. Сообщение посылается по адресу 255.255.255.255 (см. исходники)

Мне это не нравиться.

Я хочу знать маску подсети, чтобы послать например на 10.1.1.255.
Мне известен один способ получения маски посредством "inetmib1.dll"
для которой есть "C" декларации
например
BOOL SnmpExtensionInit(
DWORD dwTimeZeroReference,
HANDLE *hPollForTrapEvent,
AsnObjectIdentifier *supportedView
);
Так вот просьба, если у кого есть Pascal декларации функций, типов данных, рекордов(структур) и т.д. для "inetmib1.dll"
Не сочтите за наглость, но зачем зря возиться, если уже кто делал. :))

Или альтернативное решение проблемы получения маски.

Буду весьма благодарен.



Vaddya   (2001-09-06 23:16) [4]

А не проще ли, как сказал Борис, брать список машин в подсети и пробывать подключаться методом тыка?



SKiwa   (2001-09-07 11:07) [5]

Если рассуждать с точки зрения единственной задачи, которую написал и забыл, то может быть проще, а если с точки зрения закрыть проблему раз и навсегда, для всех последующих задач, то можно поспорить.
Правда спорить желания нет. :)
Мне действительно необходимо то что я говорил, Pascal декларации уже сделал, сегодня постараюсь сделать остальное.
Если потенциальные посетители дадут поработать :)



Anton   (2001-09-07 13:29) [6]

2 Skiwa:Можно кинуть в меня этими декларациями?



SKiwa   (2001-09-07 14:23) [7]

Получи,
Только я не тестировал.
Если чего обнаружишь, пошли исправления,
мне до среды следующей недели заниматься этим некогда.



SKiwa   (2001-09-10 10:38) [8]

Проверенно, работает(на NT). Но на win95 нет. требуется snmpapi.dll
На 98 и т.д. не проверял.



Vaddya   (2001-09-17 22:15) [9]

Я, вообще-то, задавая вопрос, имел в виду другое. Например, открываем Quake 2, заходим Multiplayer -> Join network server. Выводится список всех доступных серверов, а в консоли в это время пишется: "Pinging broadcast..." и также выводятся сервера, к которым можно подключиться. Так вот, как осуществить этот Pinging broadcast с помощью TClientSocket/TServerSocket (Не Indy)? Желателен кусок кода сюда для всех или лично мне на "мыло".



Stepan   (2001-10-28 20:18) [10]

Да, у меня точно такая же проблема. как у Vaddya
один в один. И я ненашел на нее ответа в этой дискуссии.

Довайте ее возобновим, т.к. мне тоже необходимо решить эту проблему.
Заранее благодарен.
С уважением, Гавриленко Степан.



SKiwa   (2001-10-29 08:53) [11]

Мне кажется, я дал достаточно полный ответ см. SKiwa © (06.09.01 10:53).
Придумать можно много решений.
Простейшее - Клиент посылает Broadcast сообщение и в течение некоторого времени принимает ответы от серверов, тем самым формирую их список.

Broadcast("Ау!!!");
While(True) do begin
Str := ReceiveStr;
Strings.Add(Str);
if TimeAut then
Break;
end;

На чем реализовать на Indy или TClientSocket/TServerSocket неважно, я конкретно эту задачу делал на Indy.
А уж как послать BroadCast и принять ответ это вопрос отдельный.
По TClientSocket/TServerSocket можно спросить Digitman, если не ошибаюсь он этот вопрос хорошо знает.
По Indy можно спрашивать меня.



Dust   (2001-10-29 12:38) [12]

Могу предложить свое решение. Работает ТОЛЬКО в виндюковской сетке.
В WinAPI есть функции Eumo-ов сетей, рабочих групп и хостов. Для локалки этого вполне достаточно. Есть и готовое рещение, но оно стоит $ - так не кину.




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.046 c
14-66357          Anonym                2001-11-23 12:58  2002.01.21  
Проблемы программирования


3-66178           Yank                  2001-12-16 18:41  2002.01.21  
DBGrid


14-66347          anod                  2001-11-25 00:12  2002.01.21  
?


4-66403           Floyn                 2001-11-21 18:01  2002.01.21  
Как заставить Excel поймать посланное ему сообщение?


3-66218           Mute                  2001-12-18 13:08  2002.01.21  
Через ADO+ODBC к INFORMIX