![]() |
Indy Ip Ermitteln
Hi und zwar habe ich einen TIdTCPServer, dieser wird von mehreren Clients kontaktiert.
Ich will die Clients über ihre IPs auseinander halten, wie bekomme ich diese raus?
Delphi-Quellcode:
procedure TMainForm.CommandServerTIdCommandHandlerblablaCommand( ASender: TIdCommand);
begin ASender.Thread.Connection.??? end; |
Re: Indy Ip Ermitteln
Du könntest einfach über den Client die IP an den server senden. Also wenn der Client connected, schickt er automatisch seine IP an den Server.
|
Re: Indy Ip Ermitteln
Geht nicht, Clients könnten mehrere Netzwerkkarten haben etc etc.
Kann ich nicht irgendwie auf die Socket Informationen zugreifen ?? Dem Server muss ja logischerweise die IP + Port des Clients bekannt sein. |
Re: Indy Ip Ermitteln
Ich habs rausgefunden.
ASender.Thread.Connection.Socket.Binding.PeerIP; |
Re: Indy Ip Ermitteln
Eine Frage dazu: Wie kann der TIdTCPServer (Indy10) seine eigene IP ermitteln, sobald er beim aufrufen des programms gestratt wird.
Also nur gestratet wird - ohne jegliche ein- oder ausgehende Verbindungen.
Delphi-Quellcode:
So kann ich bei TIdTCPServer Eriegnissen die IP und en Port des Servers herausbekommen.
Memo1.Lines.Add(AContext.Binding.IP) ; // IP Adresse des Servers
Memo1.Lines.Add(IntToStr(AContext.Binding.PeerPort)) ; Jedoch will ich dass IP und Port des Servers sofort beim öffnen es programms angezeigt werden. Wie kann ich das bsp. im OnCreate -Event des Hauptformulars einbetten? Wieso wird mit " AContext.Binding.PeerPort " nicht der richtige Port angeiegt? Bei mir zeigt er 2011 an jedoch wurde 50 005 eingetragen !? mfg Cya |
Re: Indy Ip Ermitteln
Guten Abend,
Delphi-Quellcode:
Die Funktion zeigt Dir alle IP Adressen des Rechners.
function GetLocalIPs: String;
type PPInAddr= ^PInAddr; var wsaData : TWSAData; HostInfo : PHostEnt; HostName : Array[0..255] of Char; Addr : PPInAddr; begin Result:=''; if WSAStartup($0102, wsaData) <> 0 then Exit; try if GetHostName(HostName, SizeOf(HostName)) <> 0 then Exit; HostInfo:= GetHostByName(HostName); if HostInfo=nil then Exit; Addr:=Pointer(HostInfo^.h_addr_list); if (Addr=nil) or (Addr^=nil) then Exit; Result:=StrPas(inet_ntoa(Addr^^)); inc(Addr); while Addr^ <> nil do begin Result:=Result+^M^J+StrPas(inet_ntoa(Addr^^)); inc(Addr); end; finally WSACleanup; end; end; Die WinSock und die NB30 Unit müssen dazu eingebunden werden. Oder mit IDIPWatch sollte das auch zu erschlagen sein. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz