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

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

Работа с idTCPServer и idTCPClient. [D6, WinXP]


inface ©   (2004-06-21 12:27:00) 

Привет всем!

У меня проблема следующая.

Пишу клиент-серверное приложение используя idTCPServer и idTCPClient.

Как отправить данные с сервера выделенному клиенту при нажатии кнопки, я вроде бы разобрался и имеет следующий вид:

procedure TfrmMain.Button1Click(Sender: TObject);
var
 Msg: string;
 Client: TSimpleClient;
begin
 msg:=edit1.Text;
 if (Msg <> '') and
   (lbClients.ItemIndex <> -1) then
 begin
   Client := Clients.Items[lbClients.ItemIndex];
   TIdPeerThread(Client.Thread).Connection.WriteLn(Msg);
 end;
end;

Клиент же в свою очередь ловит эти данные следующим образом.

procedure TForm1.Timer1Timer(Sender: TObject);
var
 Com,
   Msg,s: string;
begin
 if not IdTcpClient1.Connected then
   exit;
 Msg := IdTCPClient1.ReadLn('', 5);
 if Msg <> '' then
   if Msg[1] <> '@' then
   begin
     label2.Caption:=Msg + ' единиц, в ' + timetostr(time);
     gametime:=strtoint(msg);
   end;
end;

А как сделать так, чтобы на сервере выделить данного клиента и он в свою очередь смог выловить данные от этого клиента?
Если можно опишите что должен делать сервер и что клиент(например через таймер) в этот момент.


alienserg   (2004-06-22 01:41:00) [1]

inface ©   (21.06.04 12:27)  
Всякий раз, когда клиент шлет серверу строку, на сервере происходит событие OnExecute. Там и лови все, что приходит от клиента. Посмотри Indy ChatDemo.
Кстати имей ввиду, что когда ты по нажатию кнопки делаешь
TIdPeerThread(Client.Thread).Connection.WriteLn(Msg);
то все это дело выполняется в основном VCL потоке, а не в потоке Client.Thread
В случае, если надо инициировать передачу сообщений с сервера по уже открытому connection одновременно с отсылкой сообщений внутри OnExecute, то правильно будет расставлять Critical Sections, чтобы подстраховаться от одновременной отсылки по одному connection из двух разных тредов.


Наверх

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