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

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

TIdCmdTCPServer


Страницы:   1 2 3 4 5 6 7 8

Zalm ©   (2009-08-31 13:14:00) 

Здравствуйте, как у TIdCmdTCPServer можно всем клиентам разослать сообщение? Надо например каждому отослать команду. Это должно быть естественно в цикле, только я не знаю как и где. У TServerSocket было проще всё, ну или понятней.
1)Вот например у меня есть кнопка на сервере, как сделать чтоб ы при нажатии на кнопку каждому подключению что-то отправить, и что бы узнать его адрес там и тд?
2) Как узнать ip и handler подключения? и в каком евенте... если в OnConnect то я не опнля как...
3) Как вне событий отправить текст на подключение с известным адресом\обработчкиом?
Буду очень благодарен за помощь.


Сергей М.   (2009-09-01 22:10:00) [121]


> как лучше можно было бы сделать


Пока не будет внятного разработанного тобой протокола информационного обмена, рассуждения на тему "лучше-хуже" лишены смысла.


Zalm   (2009-09-01 21:42:00) [122]

А какие у меня выкрутасы?) вобще задача у меня такая, нужен сервер который будет как бы точкой переброса, короче надо что бы он мог создавать "пары" из соединений, и транслировать между ними (между членами в паре) трафик, в данном случае любой текст, который любой член этой пары захочет послать. Например один клиент передает команду на сервер, сервер принимает и смотрит от кого пришло и пересылает это тому кто находится в паре с этим клиентом. Да, такая спицифическая система)
Тогда что вы бы посоветовали какой компонент использовать?
Подскажите пожалуйста как лучше можно было бы сделать.


Сергей М.   (2009-09-01 10:05:00) [123]


> зачем обязательно в Execute писать?


А ты и в Execute не напишешь.
Execute вызывается только если у сервера список CommandHandlers пуст, а он у тебя заведомо не пуст, ибо нафих тогда нужен Tid CmdTCPServer ?
Ты пойми главное - TidCmdTCPServer не предназначен для выкрутасов задуманного тобой вида, он заточен и призван работать в режиме "команда клиента -> ответ сервера как результат выполнения этой команды". На то как раз ComandHandler'ы у него и существуют.


Медвежонок Пятачок   (2009-09-01 07:58:00) [124]

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

а на самом деле там у тебя там дрова лежат.

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


Zalm   (2009-09-01 03:35:00) [125]

Я наверное что-то не понимаю... но у меня нельзя так сделать из любого места. Вот допустим я знаю порт и адрес, как вы сказали,
Потом отсылаю в процедуру, адрес и порт, а когда хочу написать в процедуре Server.Connections то такого нет, есть только Server.Contexts.LockList а в лок-листе нет опять же свойства ни сокетов ни Connections...  опять я чего-то не понял? :(


Zalm   (2009-08-31 22:55:00) [126]

эх так и знал что вся подстава в этом LockList ((( я его открыл посмотрел и забил, ибо не показалось что как-то с сервером связано.

А зачем обязательно в Execute писать?

Спасибо большое, щас пойду пробовать.


Сергей М.   (2009-08-31 20:50:00) [127]


> мне Execute не надо, я там ничего не пишу


А куда ты денешься с подводной лодки ?
Придется писать.


> как записать в массив что-то конкретное из


Не надо ничего никуда "пихать" - все уже давным-давно "напихано".

В списке Connections.LockList каждый элемент - это TIdPeerThread.
У TIdPeerThread есть объектное св-во Connection: TIdSocketHandle
У объекта TIdSocketHandle есть св-ва PeerIP и PeerPort - адрес и порт клиента. Эта комбинация всегда уникальна, и этого достаточно для однозначной идентификации клиента.
Кр.того, у объекта TIdSocketHandle есть send/recv-методы для коммуникации с клиентом.


Zalm   (2009-08-31 19:01:00) [128]

а мне Execute не надо, я там ничего не пишу, всё только в командным обработчиках. А через OnConnect просто хотел записывать данные в массив о подключившихся что бы их как-то различать потом.
только вот как записать в массив что-то конкретное из события OnConnect я так и енп онял... Не подскажете?


Медвежонок Пятачок   (2009-08-31 18:32:00) [129]

для десятки это будет так:
IdCmdTCPServer1Execute(AContext: TIdContext);

вот этот контекст и есть то, что чего ты весь день ищешь


Медвежонок Пятачок   (2009-08-31 18:29:00) [130]

Дядя, в метод OnExecute сервера тебе передано нечто.
Нечто это бывает разным в разных версиях инди.
Вот это нечто и есть то что тебе надо. А так же все что вложено в этот тип.


Zalm   (2009-08-31 18:27:00) [131]

угу, если бы я писал через TServerSocket  я бы не задавал таких тупых вопросов.

Ну вот разве что это что-то дельное AContext.Connection.Socket.Binding.Handle;
и адрес там можно узнать.
Тока пользы никакой для меня, в Server.Contexts я так и не нашел куда можно этот значение приспособить...
Тока в Server.Bindings.BindingByHandle(HND).SendTo(); можно пихнуть... и то не получилось:(

а примеры на 10-Ю версию не могу найти((


Медвежонок Пятачок   (2009-08-31 17:56:00) [132]

коннекшен - это и есть "кто"


Zalm   (2009-08-31 17:46:00) [133]

да адрес клиента не при чем, это я просто сказал что например как узнать.
Главное как клиента идентифицировать что бы потом знать кто есть кто...


Медвежонок Пятачок   (2009-08-31 17:33:00) [134]

и все же загадка. зачем ему понадобился адрес клиента.


Сергей М.   (2009-08-31 17:10:00) [135]

Скачай для 10-ки, в чем проблема ?
Заодно и справку скачай.


Zalm   (2009-08-31 17:04:00) [136]

примеры у меня ткоа на 9-ю версию есть, там иначе всё написано.


Сергей М.   (2009-08-31 16:59:00) [137]


> Anatoly Podgoretsky ©   (31.08.09 16:56) [13]


Ну дык еще и исходники всегда перед носом)
Довольно сложно сыграть в ящик, имея справку+исходники ..


Anatoly Podgoretsky   (2009-08-31 16:56:00) [138]

> Сергей М.  (31.08.2009 16:43:12)  [12]

А не умрет ли он скорее со справкой, ведь речь про ИНДИ


Сергей М.   (2009-08-31 16:43:00) [139]


> "Server.Contexts" вот тут ниче нет явно


Что значит "нече нет явно" ?


> Server.Bindings


Это из другой оперы, к клиентским коннектам оно отношения не имеет.


> справки у меня нету


Мыши сгрызли ?)

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


Медвежонок Пятачок   (2009-08-31 16:41:00) [140]

да и адрес не узнать....

Интересно, что ты будешь делать, если узнаешь этот адрес.


Страницы:   1 2 3 4 5 6 7 8

Наверх

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