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

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

idTCPServer & idTCPClient Есть ли альтернатива readln ??? [D7, WinXP]


banderas ©   (2004-07-13 19:31:00) 

У меня такая проблема: Я сделал что бы запрос был по таймеру
msg:=idTCPClient1.ReadLn('',1,9999999);
memo1.Lines.Add(msg);
Всё вроди бы нормально но когда я пытаюсь отконнектится от сервака Вылазит "Not Connectid" причём столько раз сколько было сделанно запросов. Как сделать что бы эти запросы "сбрасывались" ???????????????
(Пожалуйста неделю парюсь) ;(


banderas   (2004-07-14 12:50:00) [1]

ВСЕ РАБОТАЕТ БОЛЬШОЕ СПАСИБО!!! :)


Reindeer Moss Eater   (2004-07-14 12:31:00) [2]

Ну и еще прочитай описание метода CheckForDisconnect


Reindeer Moss Eater   (2004-07-14 12:28:00) [3]

procedure TForm1.Button2Click(Sender: TObject);
var
msg:string;
begin
if idTCPClient1.Connected=false then
begin
idTCPClient1.Host:=host.Text;
idTCPClient1.Connect(-1);
idTCPClient1.WriteLn('dsf');
button3.Caption:='Disconnect';
ExitFlag := False;
repeat
try
msg:=idTCPClient1.ReadLn('',1,9999999);
memo1.Lines.Add(msg);
except
ExitFlag := true;
end;
until msg = 'qw1' or ExitFlag;

end
else
begin
idTCPClient1.WriteLn('qw1');
ExitFlag := true;
idTCPClient1.Disconnect;
button3.Caption:='Connect';
end;

end;


banderas   (2004-07-14 12:24:00) [4]

Про сообщение об ОШИБКЕ:  "Not Connectid" при нажатии на Disconnect.

Если нажать на кнопку один раз то произойдёт Connect. А если ещё раз то Disconnect. Как сделать чтобы до Disconnecta происходила отправка сообщения (idTCPClient1.WriteLn('qw1');) или есть другой способ ?
 
procedure TForm1.Button2Click(Sender: TObject);
var
msg:string;
begin
if idTCPClient1.Connected=false then
begin
idTCPClient1.Host:=host.Text;
idTCPClient1.Connect(-1);
idTCPClient1.WriteLn('dsf');
button3.Caption:='Disconnect';
repeat
msg:=idTCPClient1.ReadLn('',1,9999999);
memo1.Lines.Add(msg);
until msg = 'qw1';

end
else
begin
idTCPClient1.WriteLn('qw1');
idTCPClient1.Disconnect;
button3.Caption:='Connect';
end;

end;


Reindeer Moss Eater   (2004-07-14 12:12:00) [5]

Прочитай в книгах про блоки try except


Reindeer Moss Eater   (2004-07-14 12:06:00) [6]

А дальше можно уже по русски и внятно?

Мы вообще про сообщения сервера/клиента или про сообщения об ошибках?


banderas   (2004-07-14 11:57:00) [7]

А как сделать что бы при нажатиии на дисконнект ни каких сообщений невылазило ?


Reindeer Moss Eater   (2004-07-14 09:06:00) [8]

когда тыкаю на disconnect то вылазит всего лиш одно сообщение

И что?
А сколько их было отправлено? (Учитывая твой недефолтный признак конца строки)


banderas   (2004-07-13 21:05:00) [9]

Да чё то я про цикл repeat совсем позабыл. Но уменя снова небольшая проблема

repeat
msg:=idTCPClient1.ReadLn('',1,9999999);
memo1.Lines.Add(msg);
until msg = 'qw1';

когда тыкаю на disconnect то вылазит всего лиш одно сообщение
Я пробовал так
idTCPClient1.WriteLn('qw1');
idTCPClient1.Disconnect;
но это не помогает...


Reindeer Moss Eater   (2004-07-13 19:45:00) [10]

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

Теперь добавляем пресловутый таймер и в каждом тике вызываем и вызываем ReadLn.
В то время как самый первый вызов еще не завершил работу.
Спрашивается зачем?

repeat
msg:=idTCPClient1.ReadLn('',1,9999999);
until msg = 'Пора домой';

и все.
и никаких таймеров.


banderas   (2004-07-13 19:40:00) [11]

Ребят я не знаю как подругому подскожите УМОЛЯЮ


Reindeer Moss Eater   (2004-07-13 19:38:00) [12]

Зачем таймер компоненту с синхронными методами?
Зачем?
Зачем ему таймер?
Можешь объяснить?


Наверх

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