TIP [DELPHI] – Leggere l’indirizzo IP del computer su cui gira la vs applicazione
E’ possibile ottenere l’ip (ip address) del proprio computer utilizzando la classe Indy “idIpWatch” , ad esempio per inserire l’ip nella caption del ns form è sufficiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
implementation uses IdIPWatch; ... procedure TfrmMain.FormCreate(Sender: TObject); var ids: TidIpWatch; begin ids := TidIpWatch.Create; Caption := Caption + '(' + ids.LocalIP + ':8888)'; ids.Free; end; |
Se invece ci si volesse complicare un pochino la vita si potrebbe interrogare direttamente il winSock in modo da non dover includere una classe indy nel progetto ma semplicemente il remap delle socket di windows. Di seguito una funzione che utilizzavo in Delphi 7 … che ovviamente da Delphi 2009 in poi andrebbe rivista dato che le stringhe sono diventate in formato Unicode.
di seguito la funzione che interroga Winsock:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
uses winsock; ... function GetIPFromHost(var HostName, IPaddr, WSAErr: string): Boolean; type Name = array[0..100] of Char; PName = ^Name; var HEnt: pHostEnt; HName: PName; WSAData: TWSAData; i: Integer; begin Result := False; if WSAStartup($0101, WSAData) = 0 then begin WSAErr := 'Winsock is not responding."'; Exit; end; IPaddr := New(HName); if GetHostName(HName^, SizeOf(Name)) = 0 then begin HostName := StrPas(HName^); HEnt := GetHostByName(HName^); for i := 0 to HEnt^.h_length - 1 do Begin IPaddr := Concat(IPaddr,IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.'); End; SetLength(IPaddr, Length(IPaddr) - 1); Result := True; end else begin case WSAGetLastError of WSANOTINITIALISED : WSAErr:='WSANotInitialised'; WSAENETDOWN : WSAErr:='WSAENetDown'; WSAEINPROGRESS : WSAErr:='WSAEInProgress'; end; end; Dispose(HName); WSACleanup; end; |