如何取本机的IP地址?先谢了。

cathy01 2003-01-07 09:48:39
如何取本机的IP地址?
...全文
64 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
joky1981 2003-01-07
获取IP地址的方法很多,如下:

function GetComputerName: string;
var
Size: DWord;
begin
Size := MAX_COMPUTERNAME_LENGTH+1;
SetLength(Result, Size);
Windows.GetComputerName(PChar(Result), Size);
SetLength(Result, StrLen(PChar(Result)));
end;
function GetHostAddress: string;
var
wd: TWSAData;
phe: PHostEnt;
begin
if 0 <> WSAStartup(MakeWord(2, 0), wd) then
raise Exception.Create('初始化 WinSock 失败!')
else
try
SetLength(Result, 255);
if 0 <> gethostname(PChar(Result), 255) then
raise Exception.Create('无法取得本计算机名称!');
SetLength(Result, StrLen(PChar(Result)));
phe := gethostbyname(PChar(Result));
if nil = phe then
raise Exception.Create('无法解析本计算机名称到IP地址!');
//修改此处代码可适用于多个IP情况
Result := inet_ntoa(PInAddr(phe.h_addr^)^);
finally
WSACleanup;
end;
end;

你要是嫌上面的麻烦,可以直接放一个Fastnet组件,如TNMDayTime,取其LocalIP属性。

NMDT: TNMDayTime;
.........
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('本机的IP地址是:'+NMDT.localIP);
end;

end.
回复
jjp 2003-01-07
用fastnet下的TNMftp控件,
nmftp1.localip即可
回复
sjdf 2003-01-07
下面这个是我用c写的,希望对你有帮助。

char* GetLocalIP()
{
WSADATA wsadata;
char szHostName[128+1] = "\0";
hostent *phe;
in_addr myip;

if (WSAStartup(MAKEWORD(2,0), &wsadata) != 0)
{
return NULL;
}

if(gethostname(szHostName, 128 ) == 0)
{
phe = gethostbyname(szHostName);
memcpy((char*)&myip,phe->h_addr_list[0],4);
WSACleanup();
return (inet_ntoa(myip));

}
else
{
WSACleanup();
return NULL;
}

}
回复
灯草拐杖 2003-01-07
给你一个代码
var
Form1: TForm1;
FComputerName : String;//用来存贮本机的计算机名称
FComputerIP : String; //用来存贮本机的计算机IP地址

implementation

{$R *.DFM}

procedure GetClientPcNameIP; //定义了一个局部函数,这个函数的功能是获取本机的计算机名称和IP
const
nSize = 256;
var
strName : PChar;
pWsaData : WSAData;
nHostent : PHostEnt;
Ver : Word;
begin
try
//初始化WinSock
Ver := MakeWord(2,0);
if WSAStartup(Ver,pWsaData) <> 0 then exit;

//获取本机的计算机名和IP
GetMem(strName,nSize);
if GetHostName(strName,nSize) <> 0 then exit;
FComputerName := strName;
nHostent := GetHostByName(strName);
//FPcIP := AnsiString(inet_ntoa((pinin_addr((hInfo.h_addr_list)^))^));

FComputerIP := inet_ntoa((PInAddr((nHostent.h_addr_list)^))^);
finally
FreeMem(strName);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
GetClientPcNameIP;
Edit1.Text := FComputerName;
Edit2.Text := FComputerIP;
end;
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1565

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告