[fpc-pascal] lNet getting the local IP
Felipe Monteiro de Carvalho
felipemonteiro.carvalho at gmail.com
Wed Oct 6 15:27:30 CEST 2010
Ok, thanks everyone, it seams that I managed to extract a function
from Silvio's code which doesn't use Synapse. I only tested in Windows
so far:
unit chesstcputils;
{$mode objfpc}{$H+}
interface
uses
{$IFDEF MSWINDOWS}
Winsock,
{$ENDIF}
Classes, SysUtils;
function ChessGetLocalIP(): string;
implementation
const
CFormatIPMask = '%d.%d.%d.%d';
function ChessGetLocalIP(): string;
var
I, VAttempt: Integer;
VStrTemp, VSitesToTry: TStringList;
{$IFDEF UNIX}
VProcess: TProcess;
{$ENDIF}
{$IFDEF MSWINDOWS}
var
VWSAData: TWSAData;
VHostEnt: PHostEnt;
VName: string;
{$ENDIF}
begin
Result := '';
{$IFDEF UNIX}
VStrTemp := TStringList.Create;
VProcess := TProcess.Create(nil);
try
VProcess.CommandLine :=
'sh -c "ifconfig eth0 | awk ''/inet end/ {print $3}''"';
VProcess.Options := [poWaitOnExit, poUsePipes];
VProcess.Execute;
VStrTemp.LoadFromStream(VProcess.Output);
Result := Trim(VStrTemp.Text);
finally
VStrTemp.Free;
VProcess.Free;
end;
{$ENDIF}
{$IFDEF MSWINDOWS}
{$HINTS OFF}
WSAStartup(2, VWSAData);
{$HINTS ON}
SetLength(VName, 255);
GetHostName(PChar(VName), 255);
SetLength(VName, StrLen(PChar(VName)));
VHostEnt := GetHostByName(PChar(VName));
with VHostEnt^ do
Result := Format(CFormatIPMask, [Byte(h_addr^[0]), Byte(h_addr^[1]),
Byte(h_addr^[2]), Byte(h_addr^[3])]);
WSACleanup;
{$ENDIF}
end;
end.
--
Felipe Monteiro de Carvalho
More information about the fpc-pascal
mailing list