![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIdTCPServer - узнать IP или имя кто к нему приконнектился... [D7]
Layner © (2006-11-17 11:43:00)В примере "IdTCPDemo" у них видимо ошибка, вместо имени клиента возвращается имя сервера... как следствие, не понятно, кто законнектился...
procedure TServerFrmMain.ServerConnect(AThread: TIdPeerThread);
var
NewClient: PClient;
begin
GetMem(NewClient, SizeOf(TClient));
{! в сл. строке не точность...}
NewClient.DNS := AThread.Connection.LocalName; {! возвращает имя сервера, а не клиента!}
NewClient.Connected := Now;
NewClient.LastAction := NewClient.Connected;
NewClient.Thread :=AThread;
AThread.Data:=TObject(NewClient);
try
Clients.LockList.Add(NewClient);
finally
Clients.UnlockList;
end;
Protocol.Lines.Add(TimeToStr(Time)+' Connection from "'+NewClient.DNS+'"');
end;
Layner (2006-11-17 13:08:00) [1]
Reindeer Moss Eater © (17.11.06 11:57)
Может я что не понял, но если у меня логинятся 3 клиента, а в СЕРВЕРЕ пишется 3 раза
10:35:59 Connection from "Vasia" (Это конект с машины 192.168.0.51)
10:36:59 Connection from "Vasia" (Это конект с машины 192.168.0.52)
10:37:59 Connection from "Vasia" (Это конект с машины 192.168.0.53)
Или пример такой... в общем не удобно, переделал :)
Сергей М. (2006-11-17 11:57:00) [2]Клиент не обязан фигурировать в DNS, так что затея вряд ли оправдана.
Гораздо полезней знать IP-адрес клиента, нежели имя его хоста, которого может и не быть.
А вот это
Protocol.Lines.Add
делать в дан.контексте не допустимо - обработчик иполняется в контексте потока AThread, а не в основном потоке
Reindeer Moss Eater (2006-11-17 11:57:00) [3]AThread.Connection.LocalName; {! возвращает имя сервера, а не клиента!}
А с какого перепугу локалнэйм серверного треда должно быть клиентом?
Layner (2006-11-17 11:56:00) [4]Дошло :)
AThread.Connection.Socket.Binding.PeerIP