Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск сервера для TClientSocket [D5, WinME]


Vaddya ©   (2001-09-06 00:27:00) 

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


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

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


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

Мне кажется, я дал достаточно полный ответ см. 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 можно спрашивать меня.


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

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

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


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

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


SKiwa   (2001-09-10 10:38:00) [5]

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


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

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


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

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


SKiwa   (2001-09-07 11:07:00) [8]

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


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

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


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

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

для 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"
Не сочтите за наглость, но зачем зря возиться, если уже кто делал. :))

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

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


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо