Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

OnExecute для TIdTCPClient   Найти похожие ветки 

 
alexEagle ©   (2003-12-22 15:45) [0]

Когда я отсылаю сообщение серверу (TIdTCPServer) , у него срабатывает метод OnExecute. Как мне организовать такой же метод обработки сообщений для клиента?

Таймер не предлагать!

С уважением, Сорокин А.Е.


 
kolesya ©   (2003-12-22 16:04) [1]

Удалено модератором
Примечание: Оффтоп...


 
S@shka ©   (2003-12-22 16:18) [2]

Клиент вешается на таймер и делает просто счтение из сокета...
Это очень хорошо показано например в...
Demos\Internet\Chart\CbChat.dpr


 
alexEagle ©   (2003-12-22 16:22) [3]

Специально для S@shka:
Таймер не предлагать! было написано потому, что этот подход я и так знаю, но он мне не нравится. Объяснять почему не нравится - не хочу, и не спрашивать


 
Digitman ©   (2003-12-22 16:23) [4]


> Как мне организовать такой же метод обработки сообщений
> для клиента?


нахрена ? imho, идиотская логика у события OnExecute() !


 
alexEagle ©   (2003-12-22 16:29) [5]

Digitman -> IMHO если вопрос возник, значит нужно.
ALL -> А вообще, если кто не понял, то я не ищу метод OnExecute у клиента!
Мне просто нужно организовать подобную обработку, поэтому если есть варианты у кого-нибудь, то готов рассмотреть.


 
Digitman ©   (2003-12-22 16:44) [6]


> значит нужно


мало ли чео тебе "нужно" !

соотв.клиент там реализован иначе ! нет там никаких OnExecute) ...и - слава богу, что так)


 
alexEagle ©   (2003-12-22 16:52) [7]

Digitman -> Просьба больше не присылать свои пустые ответы


 
savva ©   (2003-12-22 16:58) [8]

> alexEagle © (22.12.03 16:52) [7]
> Digitman -> Просьба больше не присылать свои пустые ответы
я думаю остановиться стоит тебе.. как был задан вопрос - такие ответы.. я например до сих пор не понял - зачем тебе это надо.. и даже не понял - что " это".. объяснишь попонятнее?


 
Reindeer Moss Eater ©   (2003-12-22 16:59) [9]

repeat
idTcpClient1.Read....
....
case SomeThing of
.....
end
until false;


 
alexEagle ©   (2003-12-22 17:08) [10]

Подробнее:
У меня есть сервер TCP на котороя я делаю опрос COM-порта по таймеру, с некоторым интервалом, и должен разослать результаты опроса все своим клиентам.
При этом хотелось бы чтобы у клиента в момент получения данных срабатывало некоторое событие (как, например, в сервере OnExecute).

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

Именно поэтому я и задал вопрос в этот форум.

P.S. Ответы вроде "нет там таких", "...и не надо" просьба не присылать - ничего полезного они не содержат в себе.


 
Reindeer Moss Eater ©   (2003-12-22 17:10) [11]

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

Ты видел примеры для компонентов с асинхронными методами, а сам связался с компонентами имеющими синхронные методы.

Все что тебе надо - вариации на тему [9]


 
alexEagle ©   (2003-12-22 17:21) [12]

Reindeer Moss Eater © (22.12.03 17:10) [11]
Я вообще недавно занимаюсь разработкой клиент-серверных приложений, а нельзя ли мне объяснить поподробнее каким образом такое произошло? Я взял компоненты из примеры и там были асинхронные методы а у меня стали синхронными?


 
Reindeer Moss Eater ©   (2003-12-22 17:24) [13]

В примерах к библиотеке с которой ты работаешь (TidTCPClient) нет примеров с использованием таймера.


 
alexEagle ©   (2003-12-22 17:29) [14]

Reindeer Moss Eater © (22.12.03 17:24) [13]
C:\Program Files\Borland\Delphi6\Demos\Internet\Chat\Client
для обработки сообщений от сервера используетс следующий код

procedure TForm1.Timer1Timer(Sender: TObject);
var
Com,
Msg: string;
begin
if not IdTcpClient1.Connected then
exit;

Msg := IdTCPClient1.ReadLn("", 5);

if Msg <> "" then
if Msg[1] <> "@" then
begin
{ Not a system command }
memLines.Lines.Add(Msg);
end
else
begin
{ System command }
Com := UpperCase(Trim(Copy(Msg, 2, Pos(":", Msg) - 2)));
Msg := UpperCase(Trim(Copy(Msg, Pos(":", Msg) + 1, Length(Msg))));
if Com = "CLIENTS" then
lbClients.Items.CommaText := Msg;
end;

end;
=====================================
Все класно, но мне нужно без таймера


 
Reindeer Moss Eater ©   (2003-12-22 17:30) [15]

[9]


 
alexEagle ©   (2003-12-22 17:32) [16]

Reindeer Moss Eater © (22.12.03 17:30) [15]
Аську свою дай


 
Reindeer Moss Eater ©   (2003-12-22 17:34) [17]

Я ею не пользуюсь.


 
alexEagle ©   (2003-12-22 17:41) [18]

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


 
psn   (2003-12-22 18:33) [19]

а почему бы не использовать компоненты TClientSocket и TServerSocket?


 
alexEagle ©   (2003-12-22 18:54) [20]

Видимо придется


 
S@shka ©   (2003-12-22 20:04) [21]

Indy компоненты асинхронные
там нельзя поменять как в TClientSocket блокируемый или неблокируемый сокет.
Он вегда блокируемый
Соответствено нет никаго Execute у Клиента (не предусматриваолсь)


 
GoldenFILL   (2004-01-04 10:11) [22]

Попробуй использовать нить

TClientThread = class(TThread)
private
Msg: String;
procedure ReadLine;
protected
procedure Execute; override;
end;
var
MainForm: TMainForm;
ClientThread: TClientThread;

implementation

{$R *.dfm}
procedure TClientThread.ReadLine;
begin
MainForm.ListBox.Items.Add(Msg);
end;

procedure TClientThread.Execute;
begin
while not Terminated do
if MainForm.TCPClient.Connected then
begin
Msg := MainForm.TCPClient.ReadLn();
if Msg <> "" then
ReadLine;
end
else
Terminate;
end;

procedure TMainForm.TCPClientConnected(Sender: TObject);
begin
ClientThread := TClientThread.Create(True);
ClientThread.FreeOnTerminate := True;
ClientThread.Resume;
end;



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

Текущий архив: 2004.03.09;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
6-25850
LOX
2003-12-29 18:24
2004.03.09
IP в доменное имя


1-25810
REVERSE
2004-02-25 23:43
2004.03.09
Слежение за подключениями программ к и-нету


4-25968
Igit
2004-01-03 22:08
2004.03.09
Debug API в XP


14-25889
TUser
2004-02-16 11:57
2004.03.09
Карта


1-25792
sapsi
2004-02-26 08:15
2004.03.09
Панель как в винампе