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

Вниз

данные от сервера INDY всем клиентам INDY   Найти похожие ветки 

 
Sergio77   (2006-05-05 01:31) [0]

Подскажите пожклуйста, как это сделать?


 
Slym ©   (2006-05-05 09:23) [1]

For i:=0 to Clients.Count-1 do
 Clients.Items[i].Send("");


 
Sergio77   (2006-05-05 12:14) [2]

не могу найти свойство clients

и кстати, как принять данные у клиента, не вижу там событий таких..??

indy 10.0.20


 
Eraser ©   (2006-05-05 14:14) [3]


> Sergio77   (05.05.06 12:14) [2]


> и кстати, как принять данные у клиента

i := idTCPClient.IOHandler.ReadInteger;

>  не вижу там событий таких

событий и не увидишь, Indy работает только с блокирующими сокетами.


 
Sergio77   (2006-05-05 14:45) [4]


> событий и не увидишь, Indy работает только с блокирующими
> сокетами.


т.е. нужно создать поток для клиента чтобы прослушивать данные?


 
Slym ©   (2006-05-05 16:18) [5]

Sergio77   (05.05.06 14:45) [4]
нужно создать поток для клиента чтобы прослушивать данные?

За тебя Indy уже создала


 
Плохиш ©   (2006-05-05 16:52) [6]


> данные от сервера INDY всем клиентам INDY

Держитесь от этого сервера подальше, он больной. Бегает за всеми клиентами, какие-то данные всучить пытается.


 
Sergio77   (2006-05-05 17:09) [7]

пошутил...


 
Плохиш ©   (2006-05-05 17:15) [8]


> Sergio77   (05.05.06 17:09) [7]
> пошутил...

Нет, всё серьёзно. Сервер преднозначен для того что бы отвечать на запросы клиентов, а не пытаться сунуть клиенту какую-то информацию по своему желанию, к тому совершенно не нужную клиенту. Или у Вас другие представления о работе сервера.


 
Sergio77   (2006-05-05 17:33) [9]

пример простого сетвого чата с архитектурой клиент-сервер работает так:
один из клиентов отсылает сообщение серверу, а сервер в свою очередь отсылает по всем остальным клиентам, правильно?

p.s. и клиенты (остальные) не знают когда к ним прийдет сообщение...

так почему бы мне не сделать следущее:

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

вот поэтому и спрашиваю...
а принятые нормы о тех которых вы говорите - это ведь не запрет, правильно?


 
Eraser ©   (2006-05-05 17:46) [10]


> Sergio77   (05.05.06 17:33) [9]


> один из клиентов отсылает сообщение серверу, а сервер в
> свою очередь отсылает по всем остальным клиентам, правильно?
>

при этом, у сервера со всеми клиентами уже установлено соединение, инициированое именно клиентами.


 
Sergio77   (2006-05-05 17:58) [11]


> при этом, у сервера со всеми клиентами уже установлено соединение,
>  инициированое именно клиентами.


да, для начала, ну а потом происходит так как мне нужно, но с indy у меня не получается..

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

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

предсатвьте себе ситуацию, когда вы звоните в магазин и спрашиваете - появилась ли нужная вам вещь....и так сотня клиентов...

скорее всего продавец отключит телефон или скажет что перезвонит сам, как только появится то что вам нужно...

не совсем удачный пример, т.к. это про человек - а то все-таки компьютер - нервы у него крепче...

но рациональность аналогичная..


 
Sergio77   (2006-05-05 17:58) [12]

вообще говоря, если знаете как помочь - скажите...


 
Плохиш ©   (2006-05-05 18:16) [13]


> и потом если информация необходима сразу по ее обновленни,
>  то либо клиенту нужно постоянно опрашивать сервер (и так
> нескольким или нескольким десяткам клиентов) и это в свою
> очередь будет нагружать сеть и сервер (насколько сильно
> - другой разговор), либо сервер сам скажет что информация
> обновилась...

Если сервер сам говорит что-то клиенту, то они в этот момент меняются ролями. Т.е. это означает, что в клиенте должна быть реализована функциональность сервера. Открываем пример из поставки делфи NetChat и что мы там видим? На форме лежат компоненты TcpClient1 и TcpServer1. Вот и ответ на твой вопрос.


 
Eraser ©   (2006-05-05 18:27) [14]


> Sergio77   (05.05.06 17:58) [11]


> и потом если информация необходима сразу по ее обновленни,
>  то либо клиенту нужно постоянно опрашивать сервер (и так
> нескольким или нескольким десяткам клиентов) и это в свою
> очередь будет нагружать сеть и сервер

а, по-вашему, ICQ не оправшивает сервер постоянно? и с чего это будет нагружать сеть, если в качестве опроса можно отсылать только 1 байт к примеру?

> а если она обновилась только через сутки, и сеть загружена
> другой работой, то рациональнее не опрашивать каждый раз
> серве а подождать, когда он сам скажет..

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


 
Sergio77   (2006-05-05 18:33) [15]

клиент умеет принимать данные?

вот второй ответ


 
Sergio77   (2006-05-05 18:34) [16]


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


не умеет принимать ??

пошутил?


 
Плохиш ©   (2006-05-05 18:37) [17]


> Sergio77   (05.05.06 18:34) [16]

Клиент умеет только принимать ответы на свои запросы. [13] не помогает?


 
Sergio77   (2006-05-05 18:40) [18]


> Если сервер сам говорит что-то клиенту, то они в этот момент
> меняются ролями. Т.е. это означает, что в клиенте должна
> быть реализована функциональность сервера. Открываем пример
> из поставки делфи NetChat и что мы там видим? На форме лежат
> компоненты TcpClient1 и TcpServer1. Вот и ответ на твой
> вопрос.


procedure TChatForm.Memo1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if Key = VK_Return then
   if IsServer then
     ServerSocket.Socket.Connections[0].SendText(Memo1.Lines[Memo1.Lines.Count - 1])
   else
     ClientSocket.Socket.SendText(Memo1.Lines[Memo1.Lines.Count - 1]);
end;

а теперь посмотрим очень внимательно..........
на тот пример


 
Sergio77   (2006-05-05 18:44) [19]

если тут отсылает сервер то кто принимает ?
при условии что чаты запущены на одной и той же тачке...

p.s. вторые два не задействуют сервера...


 
Sergio77   (2006-05-05 18:47) [20]

дело тут наверное в другом - просто клиент не сможет принять данные от другого сервера т.к. он присоединент к конкретному...
а сервер может принять много соединений вот, наверное, и вся разница..


 
Плохиш ©   (2006-05-05 18:48) [21]


> Sergio77   (05.05.06 18:40) [18]

Я не знаю где Вы взяли свой код. Но пример для NetChat рекомендую всё-таки посмотреть, там и строк-то совсем не много.


 
Sergio77   (2006-05-05 18:50) [22]

код я взял из стандартных примеров delphi 5


 
Плохиш ©   (2006-05-05 19:03) [23]


> Sergio77   (05.05.06 18:50) [22]
> код я взял из стандартных примеров delphi 5

В следующий раз указывайте, пожалуйста, версию делфи в самом начале. Речь я вёл о 7й. Что там и как делается в связке TServerSocket/TClientSocket я в данный момент ещё не знаю.
Хотя, судя по коду, они оба реализуют функциональность как сервера так и клиента. А при более внимательном рассмотрении, всё уже описано в Eraser ©   (05.05.06 18:27) [14]


 
Sergio77   (2006-05-05 19:06) [24]

я не согласен....там с клиентом

клиент принимать может..и не только ответы..


 
Sergio77   (2006-05-05 19:14) [25]

короче говоря у стандартных сокетов есть свойства
ServerSocket.Socket.Connections и по ним можно каждому клиенту отослать данные

у клиента есть событие onread - (видимо у клиента есть отдельный поток)
по которому клиент может принимать в любое время..

вот у indy не могу найти ни свойств ни событий подобных..

p.s. я использую d2005 и там TClientSocket и TServerSocket такие же как и в d5? думаю, что и d7 в этом ничем не отличается..


 
Sergio77   (2006-05-05 19:19) [26]


> p.s. я использую d2005 и там TClientSocket и TServerSocket
> такие же как и в d5, думаю, что и d7 в этом ничем не отличается.
> .

запятую вместо вопроса поправил :)


 
Eraser ©   (2006-05-05 20:51) [27]


> Sergio77

слушай, купи лучше книгу по сетям (и прочитай её) :))


 
Sergio77   (2006-05-06 00:15) [28]

поумничал и все...и ничего конкретного

или ты думаешь про книгу токо ты сообразить мог? :)


 
Eraser ©   (2006-05-06 01:55) [29]


> Sergio77   (06.05.06 00:15) [28]

что ты хотел услышать на такой вопрос?

данные от сервера INDY всем клиентам INDY

Sergio77   (05.05.06 01:31)  

Подскажите пожклуйста, как это сделать?


извини, ничем конкретнее помочь не могу.


 
Slym ©   (2006-05-06 04:32) [30]

Sergio77   (05.05.06 18:40) [18]
ServerSocket.Socket.Connections[0].SendText(Memo1.Lines[Memo1.Lines.Count - 1])

Connections[0] - список подключений примени к нему мой [1] пост
но до рабочего сервера при этом далеко...


 
Сергей М. ©   (2006-05-06 08:24) [31]


> Sergio77


Не знаю как в 10-ке, а в 9-ке TIdTCPServer имеет св-во-список Threads, каждый элемент которого есть объект класса TIdPeerThread. В свою очередь TIdPeerThread имеет св-во Connection: TIdTCPServerConnection, у которого есть соответствующие методы приема-передачи.


 
Volfram   (2006-06-15 16:29) [32]


> Не знаю как в 10-ке, а в 9-ке TIdTCPServer имеет св-во-список
> Threads, каждый элемент которого есть объект класса TIdPeerThread.
>  В свою очередь TIdPeerThread имеет св-во Connection: TIdTCPServerConnection,
>  у которого есть соответствующие методы приема-передачи.
>


А как получить конкретный TIdPeerThread то? у Threads нет ни свойства Items, ни метода GetItem, только Add и Remove. :(


 
Volfram   (2006-06-15 16:30) [33]


> Не знаю как в 10-ке, а в 9-ке TIdTCPServer имеет св-во-список
> Threads, каждый элемент которого есть объект класса TIdPeerThread.
>  В свою очередь TIdPeerThread имеет св-во Connection: TIdTCPServerConnection,
>  у которого есть соответствующие методы приема-передачи.
>


А как получить конкретный TIdPeerThread то? у Threads нет ни свойства Items, ни метода GetItem, только Add и Remove. :(


 
Volfram   (2006-06-15 16:31) [34]

Упс, извините за дубль :/



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

Форум: "Сети";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.043 c
15-1161079948
Empleado
2006-10-17 14:12
2006.11.05
Интересно, через какое время оно придет в каждый дом?


2-1161222527
morda
2006-10-19 05:48
2006.11.05
выборка float из mysql


15-1160968930
Slider007
2006-10-16 07:22
2006.11.05
С днем рождения ! 16 октября


2-1161102041
Jimmy
2006-10-17 20:20
2006.11.05
Scrolling в StringGrid


15-1160666005
vidiv
2006-10-12 19:13
2006.11.05
дайте скачать 3dsmax =)





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