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

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

Как получить сообщение от TCPServera? [D7, WinXP]


Страницы:   1 2

Anton. ©   (2004-06-09 16:06:00) 

Проблема такая отправляю сообщение на сервер
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 IdTCPClient1.WriteLn(‘М'+Memo2.Text);
end;
на сервере обработчик
 if Msg[1]='M' then
  begin
   BroadcastMessage('E', 'New Message');
  End;
Как клиенту получить это сообщение, делать ReadLn по таймеру?


Anton.   (2004-06-10 10:54:00) [21]

хорошо вот такой код отправит сообщения все подключенным на данный момент клиентам?
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
 Msg : string;
 Count: Integer;
begin
 Msg    := AThread.Connection.ReadLn;
 for Count := 0 to IdTCPServer1.Threads.LockList.Count -1 do
   TIdPeerThread(IdTCPServer1.Threads.LockList.Items[Count]).Connection.WriteLn(Msg);
 IdTCPServer1.Threads.UnlockList;


Digitman   (2004-06-10 10:15:00) [22]


> Anton.   (10.06.04 09:49) [9]


объект TIdTCPServer  имеет св-во Threads: TThreadList, это список объектов класса TIdPeerThread, каждый из которых ассоциирован с активным клиентом

объект TIdPeerThread имеет св-во Connection:  TIdTCPServerConnection

объект Connection имеет метод WriteLn()


Reindeer Moss Eater   (2004-06-10 09:55:00) [23]

При чем здесь таймер?
Зачем он?

А про то, что надо сделать что бы все клиенты получили сообщение первого клиента тебе уже сказали.


Artem03   (2004-06-10 09:54:00) [24]

Я у себя реализовал это по таймеру, т.е. после посылки сообщения на сервер (IdTCPServer) мой клиент ждет 1,5 секунды (как сказала одна барышня: "Шоб на верняка"), а затем принимает информацию от сервера.
Касательно сервера. У него есть событие
OnExecute(AThread: TIdPeerThread), где AThread ОДНОЗНАЧНО ИДЕНТИФИЦИРУЕТ источник получения информации (IdTCPClient'а, короче). А потому, вешаешь на это событие нужный тебе код и вперед.
А у параметра AThread есть куча всяких свойств, Например - Connection (соединение, ВЫЗВАВШЕЕ метод OnExecute).
У него есть методы Write...(написать клиенту) и Read...(прочитать от клиента). Так что успехов.


Anton.   (2004-06-10 09:49:00) [25]

нет вопрос в другом как осуществить широковешательное сообщение, то есть например один клиент послал серверу сообщение, и об этом сразу же должны знать все клиенты подсоедененные к серверу. Делать это по таймеру опрашивать всем сервер, или ставить TCP клиент и TCP сервер на одно приложение?


Reindeer Moss Eater   (2004-06-10 09:33:00) [26]

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


Anton.   (2004-06-10 08:50:00) [27]

Чесно смотрел, но если клиент отправит серверу сообщение WriteLn, то клиент его получит только опросив сервер, так?


Digitman   (2004-06-10 08:20:00) [28]


> Что то я нигде таких примеров не нахожу


ну разумеется ... а набрать в справке по Инди-компонентам, например, ключ.слово "WriteLn" да посмотреть, какие Инди-классы имеют этот метод  - не царское это дело ..


Anton.   (2004-06-09 18:04:00) [29]

Как можно отправить сообщение от сервера к клиенту? Что то я нигде таких примеров не нахожу


Digitman   (2004-06-09 17:31:00) [30]


> а если клиентов 2


да хоть 2 миллиона !


> второй получает сообщение, только послав запрос серверу


это в отношении [1] ? не нужно интерпретировать ПРИМЕР столь буквально ...


Reindeer Moss Eater   (2004-06-09 17:25:00) [31]

Клиент посылает сообщение серверу, а не другим клиентам.
Что бы другие клиенты увидели сообщение нужно чтобы серверотправил это сообщение этим клиентам


Anton.   (2004-06-09 17:12:00) [32]

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


Reindeer Moss Eater   (2004-06-09 16:32:00) [33]

procedure TForm1.BitBtn1Click(Sender: TObject);
var Response : string;
begin
IdTCPClient1.WriteLn(‘М'+Memo2.Text);
Response:=IdTCPClient1.ReadLn;
end;


Страницы:   1 2

Наверх

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