Форум: "Сети";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизРабота с idTCPServer и idTCPClient. Найти похожие ветки
← →
inface © (2004-06-21 12:27) [0]Привет всем!
У меня проблема следующая.
Пишу клиент-серверное приложение используя 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) [1]inface © (21.06.04 12:27)
Всякий раз, когда клиент шлет серверу строку, на сервере происходит событие OnExecute. Там и лови все, что приходит от клиента. Посмотри Indy ChatDemo.
Кстати имей ввиду, что когда ты по нажатию кнопки делаешьTIdPeerThread(Client.Thread).Connection.WriteLn(Msg);
то все это дело выполняется в основном VCL потоке, а не в потоке Client.Thread
В случае, если надо инициировать передачу сообщений с сервера по уже открытому connection одновременно с отсылкой сообщений внутри OnExecute, то правильно будет расставлять Critical Sections, чтобы подстраховаться от одновременной отсылки по одному connection из двух разных тредов.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c