Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
4-25964
uns
2004-01-01 22:36
2004.03.09
Контектное меню IE


7-25953
Stefan
2003-12-20 20:14
2004.03.09
Завис или не завис ?


3-25697
Yrtimd
2004-02-10 18:49
2004.03.09
Как в ehDbGrid узнать, какую запись выбрал пользователь?


14-25933
Sniper-Max
2004-01-31 08:46
2004.03.09
Помогите!!! У меня странно комп перезагружается... сам!!!


14-25928
Домарощинер
2004-02-14 15:17
2004.03.09
Непонятные куки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский