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

Вниз

TServerSocket - Опрос запущеных серверов   Найти похожие ветки 

 
Mishel   (2002-07-24 15:33) [0]

Дано: В локальной сети на клиентских компах запускается задача, которая является сервером. Получаем несколько (заранее не известно на каких именно компах) запущенных копий программы.

Необходимо: Определить на каких именно компах запущена прогрмма.

Попытка решения: Нахожу все включенные компы в локалке (70-110 штук), получаю их имена и IP адреса. Пытаюсь перебирать весь список т.е. через TClientSocket пытаюсь последовательно соединиться с каждым компом (Сервером) из полученного списка. По идее если соединение проходит успешно - получаю ответ от сервера.
Тип соединения ctNonBlocking. Похоже из-за асинхронного режима в простом цикле не успевает происходить соединение даже с компом где сервер точно запущен (в пошаговом режиме - таже беда).
Может я вообще что-то не то делаю т.е. может есть возможность послать запрос сразу всем компам, а потом собрать пришедшие ответы? Хотя в дальнейшем будет необходимо определенным найденным серверам отсылать комманду т.е. все-таки нужно перебирать список - подключиться, послать комманду, принять ответ, отсоединиться...
Какие будут предложения, пожелания, напутствия?


 
Digitman ©   (2002-07-24 15:45) [1]

В данном случае :
Фактом успешного коннекта явл-ся событие OnConnect()
Фактом отказа явл-ся событие OnError()

Разве это не определяет однозначно условия обнаружения искомого сервиса в сети ? Цикл-то здесь ни при чем, каким бы он ни был - важно не игнорировать эти события...


 
YouNick ©   (2002-07-24 16:50) [2]

не совсем понятна технология ...
Странно организованно взаимодействие. Может лучше было б сделать один сервер и куча клиентов. клиенты и искали бы этот единственный сервер. По-моему все будет гораздо проще.


 
Mishel   (2002-07-25 09:57) [3]

Mishel -> Digitman:
Попробовал вариант по событиям - строю цепочку
беру первый комп из списка - пытаюсь соединиться -

если соединился (OnConnect())
посылаю запрос,
принимаю ответ,
закрываю соединение,
попытка соединения со след. компом
иначе (неудачное соединение OnError())
попытка соединения со след. компом

После опработки OnError() вылетает с ошибкой
Asynchronous socket error 10061 - тоже, что и если делаю опрос не через события а в цикле...

Mishel -> YouNick:
Полностью согласен, это для меня проще писать прогу и администрировать, и примеры подобной организации нарыл.
только как всегда есть НО!
Это я в нашем подразделении настрою сервак для запуска на нем серверной части,
а в нашем ОАО еще 26 заводов и на 14 крутится задача. Организация сетей - на каждом своя за всеми не уследишь... Самый простой вариант - поробовать сделать систему именно без центрального сервера по типу чата (пример Vypress Chat).


 
Digitman ©   (2002-07-25 10:49) [4]

Что значит - "не через события а в цикле" ?
Я тебе про фому, ты мне - про ерему) ...

Перечитай еще раз внимательно Digitman © (24.07.02 15:45)

А в цикле ты чего-то там делаешь или не в линейно - суть от этого неизменна


 
zarem ©   (2002-07-26 18:42) [5]

Mishel не мог бы ты обьяснить как ты получаешь список ip компьютеров в сети? заранее спасибо


 
Ksion ©   (2002-07-27 07:28) [6]

Попробовал вариант по событиям - строю цепочку
беру первый комп из списка - пытаюсь соединиться -

если соединился (OnConnect())
посылаю запрос,
принимаю ответ,
закрываю соединение,
попытка соединения со след. компом
иначе (неудачное соединение OnError())
попытка соединения со след. компом

После опработки OnError() вылетает с ошибкой
Asynchronous socket error 10061 - тоже, что и если делаю опрос не через события а в цикле...


Попробуй перед началом цикла вставить Дисконект


 
Mishel   (2002-07-30 16:17) [7]

>Digitman
Спасибо, что ткнул носом на обработчики событий - вроде заработало...

>Ksion
Дисконект стоял. Я сам недоглядел - надо было в OnError() обнулять код ошибки.

>All
Короче на событиях - заработало, а если в цикле типа FOR, не пашет, очевидно из-за того, что необходимо время на установку соединения, посылку сообщения, а цикл лупит дальше.
Т.е. устанавливаю соединение -> посылаю сообщение-> принимаю ответ ->отсоединяюсь -> пытаюсь соединиться со след.компом.
Получается, что отсоединение "гасит" прием-передачу. Через события работает, но получается очень громоздко. Вообще по большому счету мне нужно послать на комп запрос и если есть моя запущенная прога, она должна вернуть мне ответ. Может это можно реализовать вообще без применения Сокетов?


 
Digitman ©   (2002-07-30 16:30) [8]

Не нравится - используй режим ctBlocking


 
sedoy ©   (2002-07-30 16:59) [9]

зачем морока с циклом ???
при запуске посылай UDP-запрос в сеть.
если на компьютере запущена программа - она поймает запрос и по обратному адресу вышлет ответ(только отсылать нужно уже по сокету, а не udp). не нужно циклов с определением компьютеров, обработкой соединений и т.п. В ответе можешь выслать всю информацию о клиенте, какая тебе нужна.


 
Jo   (2002-07-31 07:54) [10]

to Sedoy:
Как адрес broadcast узнать?


 
Mishel   (2002-07-31 15:15) [11]

>sedoy
По подробнее, если можно (я в сетях - дуб)
Пытаюсь использовать компонент TUDP, отсылка UDP1.SendData( ).
Какие значания нужно задать для свойств
LocalPort, RemoteHost, RemotePort - чтобы запрос пошел на всю локалку?
Ругается что нет таких адресов на локальной машине LocalPort, RemotePort забивал,
RemoteHost - ставил и 255.255.255.255 и свой IP и IP других реальных машин в сети.
Получать данные UDP1.GetData( X,Y ) - тип X : OleVariant; а Y ? Предлагается vbString, vbArray, vbByte - а чему они реально равны?
Плиз с кусочком кода...


 
romychk   (2002-09-30 12:24) [12]

Mishel у меня таже проблема, если у тебя получилось, скажи как?



Страницы: 1 вся ветка

Текущий архив: 2002.11.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
1-82689
MetalFan
2002-11-14 11:56
2002.11.25
есть ли дискета в дисководе


14-82983
Igorek
2002-11-06 14:52
2002.11.25
Комната в Киеве на Теремках


1-82748
iNew
2002-11-15 09:13
2002.11.25
Качаю файл по протоколу Zmodem, используя компоненту Async32


3-82571
dim-
2002-11-03 02:17
2002.11.25
Значение по умолчанию


1-82773
MixerPro
2002-11-14 15:07
2002.11.25
Надо определить параметры Рабочего Стола.