Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
1-82697
Юра
2002-11-13 11:59
2002.11.25
Модифицировать исполняемый файл.


3-82588
Zn
2002-11-04 17:31
2002.11.25
Обработка записей, помеченных к удалению.


3-82576
Aristarh
2002-11-08 11:40
2002.11.25
Как в БД лучше всего организовать


1-82766
Lola
2002-11-15 12:24
2002.11.25
ShellExecute () или аналог.


7-83024
Bishop
2002-09-26 11:05
2002.11.25
Как сделать документ Word Landscape?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский