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

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

Как определить IP отконнективающегося клиента (idTCPClient) [D7, WinXP]


banderas ©   (2004-07-21 18:10:00) 

Когда клиент присоединяется то можно узнать его IP таким способом: AThread.Connection.Socket.Binding.PeerIP А вот как узнать IP отсоединившегося.


alienserg   (2004-07-31 17:55:00) [1]

banderas ©   (21.07.04 18:10)  

В поставке Indy есть пример IndyDemos\Chat\Server (я об этом уже кажется 3-й раз упоминаю)
В нем в событии IdTcpServer.OnConnect на каждого пришедшего юзера заводится структура(там она называется TSimpleUser) и прикручивается к треду клиента. И список клиентов держится в списке Clients.
В момент дисконнекта структура клиента исключается из списка Clients.

Client := TSimpleUser.Create;
...
Client.IP := AThread.Connection.Socket.Binding.PeerIP;
//^^^^^^^^ вставь вот это  и ты в любой момент можешь
// пройтись по списку Clients и определить кто
// и по какому IP сейчас подключен.
// Как пройтись по списку, посмотри в процедуре Broadcast
{ Assign the thread to it for ease in finding }
Client.Thread := AThread;
{ Assign it to the thread so we can identify it later }
AThread.Data := Client;
{ Add it to the clients list }
Clients.Add(Client);


В момент дисконнекта анализируй
TSimpleUser(AThread.Data).IP
Там будет то, что тебе надо.
Но для начала попробуй в момент дисконнекта
AThread.Connection.Socket.Binding.PeerIP;
Скорее всего и там то, что тебе надо :)


MetalFan   (2004-07-30 12:03:00) [2]

ччерт!
lList := FServer.TCPServer.Threads.LockList;
читать как
llist := IdTCPServer.Threads.LockList;


MetalFan   (2004-07-30 12:01:00) [3]


> TServerSocket.Socket.Connections[n].RemoteAddress;

для Indy не прокатит вроде!
для Инди примерно так:
lList := FServer.TCPServer.Threads.LockList;
for i := 0 to pred(lList.count) do
SomeMemo.lines.add(TIdPeerThread(lList.Items[i]).Connection.Binding.PeerIP);
FServer.TCPServer.Threads.UnlockList;


Reindeer Moss Eater   (2004-07-30 11:12:00) [4]

и какие будутподключены не в ДАННЫЙ момент а в будущем?


Reindeer Moss Eater   (2004-07-30 11:11:00) [5]

А как узнать какие ip в ДАННЫЙ момент подключены к серваку ? (idTCPServer)

А ты умеешь определять какие IP былиподключены не в ДАННЫЙ момент к серверу?


DelphiN!   (2004-07-30 11:08:00) [6]

TServerSocket.Socket.Connections[n].RemoteAddress;


banderas   (2004-07-21 18:51:00) [7]

А как узнать какие ip в ДАННЫЙ момент подключены к серваку ? (idTCPServer)


banderas   (2004-07-21 18:24:00) [8]

Спасибо попробую.


Reindeer Moss Eater   (2004-07-21 18:12:00) [9]

IP отсоединившегося не узнаешь.
IP отсоединияющегося узанешь так же как и присоединяющегося.


Наверх

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