Форум: "Сети";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
ВнизIndy_10 Как правильно отключить клиента? Найти похожие ветки
← →
tytus © (2007-03-14 17:28) [0]В клиенте пишу:
procedure TIdFmClient.Button2Click(Sender: TObject);
begin
if Client1.Connected then
begin
Client1.SendCmd("Quit",200);
end;
end;
В сервере:
procedure TIdFmServer.Server1Execute(AContext: TIdContext);
var
LCmd:string;
begin
LCmd:=Trim(AContext.Connection.Socket.ReadLn);
Memo1.Lines.Add(LCmd);
if UpperCase(LCmd)="QUIT" then
begin
AContext.Connection.Socket.WriteLn("200 Good bye");
AContext.Connection.Disconnect;
end;
end;
На клиенте в обработчике OnStatus:
procedure TIdFmClient.Client1Status(ASender: TObject;
const AStatus: TIdStatus; const AStatusText: String);
begin
Memo1.Lines.Add(AStatusText);
SendMessage(Memo1.Handle,WM_VSCROLL,SB_BOTTOM,0);
end;
В клиенте в мемо не пишется " Disconnected", а если нажать второй раз на кнопку TIdFmClient.Button2Click , то пишет, что отключен - "Disconnected".
как правильно отключить клиента?
← →
DVM © (2007-03-14 17:35) [1]
> tytus © (14.03.07 17:28)
А ты в курсе, что TIdFmServer.Server1Execute будет выполняться не в контексте основного потока программы. И обращаться к Memo1 небезопасно?
← →
tytus © (2007-03-14 17:37) [2]>DVM © (14.03.07 17:35) [1]
А ты в курсе
а почему небезопасно?
← →
DVM © (2007-03-14 17:40) [3]
> а почему небезопасно?
Потому что VCL потоконебезопасная. Типичная ошибка при использовании Инди.
← →
tytus © (2007-03-14 17:43) [4]А как насчет вопроса?
← →
umbra © (2007-03-15 10:59) [5]не совсем ясна логика действий. Если клиент говорит серверу, что он закрывает соединение, то все что должен сделать сервер - это закрыть соединение. А клиент, согласно сказанному, закрыть свое.
procedure TIdFmClient.Button2Click(Sender: TObject);
begin
if Client1.Connected then
begin
Client1.SendCmd("Quit",200);
client1.IOHandler.CloseGracefully;
Client1.Disconnect;
end;
end;
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.055 c