| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Как правильно отключить клиента в Indy9 |
| Автор: sas099 1.11.2007, 12:47 |
| Думаю тема обсуждалась не раз, но всеже... Проблема такая: имеется сервер.К нему приконнекчено несколько клиентов.Раз в 20 сек клиенты шлют на сервер Информацию.Нужно определить если клиент в течении минуты не прислал .... значит он повис.Его надо отключить.Клиенты работают через GPRS.Видно что клиент уже 20 минут не посылает инфу а сервер его видит как законнекченного.Как поступить в этой ситуации? еще вопрос: делаю отключение коиента таким образом: procedure ServerFrmMain.Button2Click(Sender: TObject); var i:integer; begin with Server.Threads.LockList do try i:=Count; while i > 0 do begin Dec(i); TIdPeerThread(Items[i]).Connection.Write('You are Disconnected'); TIdPeerThread(Items[i]).Terminate; (*TIdPeerThread(Items[i]).Connection.Disconnect;*) end; finally Server.Threads.UnlockList; end; end; =================================================== procedure ServerFrmMain.Button1Click(Sender: TObject); var i:integer; begin with Server.Threads.LockList do try i:=Count; memo1.Lines.Clear; memo1.Lines.Insert(0,IntToStr(i)); finally Server.Threads.UnlockList; end; end; После TIdPeerThread(Items[i]).Terminate; вижу тоже самое число приконнекченных клиентов до того момента пока клиент не пошлет что-нить серверу. После этого вижу этого клиента отконнекченным и кол-во приконнекченных клиентов уменьшается на единицу.Потом слдующи клиент посылает - и опять уменьшается список приконнекченных. Подскажите где грабли? |
| Автор: MetalFan 1.11.2007, 15:32 |
| а если Connection.Close ? |
| Автор: sas099 2.11.2007, 16:58 |
| Спасибо, разобрался! Грабли были в Lock-UnlockList в нутри цикла. А отключать надо ........Connection.Disconnect(*TIdPeerThread(Items[i]).Connection.Disconnect;*) все тогда нормально работает! ) |