Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Узнать IP отключенного


Автор: xloff 7.1.2008, 02:21
Indy9, idTcpServer. На событие onDisconnect хочу словить айпишник отключающегося клиента. Вообщем ничего не получаю в AThread.Connection.Server.Bindings.Items[g].PeerIP. Вот код:

Код

procedure TForm1.TIdTCPServerDisconnect(AThread: TIdPeerThread);
var
g:integer;
ActClient: PClient;
begin
ActClient := PClient(AThread.Data);
   for g:=0 to AThread.Connection.Server.Bindings.Count-1 do begin
    RichEdit1.Lines.Add(AThread.Connection.Server.Bindings.Items[g].PeerIP);
  end;
  try
    Clients.LockList.Remove(ActClient);
  finally
    Clients.UnlockList;
  end;
  FreeMem(ActClient);
  AThread.Data := nil;
end;

Автор: MetalFan 7.1.2008, 15:09
а если посмотреть у AThread.Connection ?

Автор: xloff 7.1.2008, 16:21
Нашел. Так видит IP - AThread.Connection.Socket.Binding.PeerIP.
Вот еще, если клиент отрубается через диспетчер задач, либо теряется связь, событие onDisconnect ничего не ловит. А нужно постоянно знать список подключенных. Какой алгоритм будет проще, либо может в Indy есть функции, чтобы поддерживать список клиентов?

Сам думаю сделать так:
 От клиента через определенный интервал посылать пакет о том, что подключение активно и засекать время на сервере о приходе этого пакета. На сервере сделать таймер и через определенно кол-во времени прогонять весь список подключенных и сравнивать время с неким средним значением.
Вообщем вариант совсем не идеальный, подскажите, может есть вариант лучше?

Автор: MetalFan 7.1.2008, 19:46
при попытке отправки данных некорректно отключенному клиенту наверняка в индях сгенерится исключение... вот его и лови

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)