Форум: "Сети";
Текущий архив: 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