Hi!
Ich verwende in meinem Netzwerkchat folgende Funktion, um alle IP Adressen von allen lokal installierten Netzwerkadaptern zu bekommen (Quelle: Swissdelphicenter):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| function GetLocalIPs(const Lines:TStrings):Boolean; type PPInAddr= ^PInAddr; var wsaData: TWSAData; HostInfo: PHostEnt; HostName: Array[0..255] of Char; Addr: PPInAddr; begin Result:=False; Lines.Clear; if WSAStartup($0102, wsaData)=0 then try if gethostname(HostName, SizeOf(HostName)) = 0 then Begin HostInfo:= gethostbyname(HostName); if HostInfo<>nil then Begin Addr:=Pointer(HostInfo^.h_addr_list); if (Addr<>nil) AND (Addr^<>nil) then Repeat Lines.Add(StrPas(inet_ntoa(Addr^^))); inc(Addr); Until Addr^=nil; end; end; Result:=True; finally WSACleanup; end; end; |
Dabei ist es nicht ausreichend, einfach localhost, oder 127.0.0.1 zu verwenden, da ich die Computer per IP unterscheiden können muss und dabei mein eigener PC natürlich auch nur einer sein darf.
Ich muss also z.B. UDP- Broadcasts, die auf einem anderen Netzwerkadapter wieder reinkommen, überprüfen können, ob ich das selbst losgeschickt habe.
Bisher hat das auch gut funktioniert.
Jetzt habe ich das mal auf folgendem System getestet:
Windows ME
Kabelgebundenes Ethernet, Verbindung zum Router, IP automatisch beziehen (war wahrscheinlich 192.168.0.92)
aktiviertes WLAN zum selben Router, feste IP: 192.168.0.152
Meine Funktion spuckte mir aber nur 127.0.0.1 aus, was mir in dem Fall nichts bringt, da 192.168.0.95 und 192.168.0.152 mindestens hätten kommen sollen.
Gruß
alias5000