如何通过delphi查询到本机的IP地址,或是网卡址?

sam_chen 2006-03-17 10:01:05
如何通过delphi查询到本机的IP地址,或是网卡址?
...全文
402 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellolongbin 2006-03-17
  • 打赏
  • 举报
回复
indy misc里面有个IdIPWatch

procedure TForm1.Button1Click(Sender: TObject);
begin
IdIPWatch1.Active:=true;
Edit1.text:=IdIPWatch1.LocalIP;
IdIPWatch1.Active:=false;
end;
whisht 2006-03-17
  • 打赏
  • 举报
回复
网外一查很多的
easyboot 2006-03-17
  • 打赏
  • 举报
回复
unit client;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ,nb30,WinSock,ScktComp, Sockets, IdBaseComponent,
IdComponent, IdTCPServer, IdTCPConnection, IdTCPClient, SkinData,math,
DynamicSkinForm, ExtCtrls, ComCtrls,inifiles;

Const
MP_QUERY ='11111';
MP_REFUSE ='22222';
MP_ACCEPT ='33333';
MP_NEXTWILLBEDATA='44444';
MP_DATA ='55555';
MP_ABORT ='66666';
MP_OVER ='77777';
MP_CHAT ='88888';
MP_END='99999';
MP_FILEPROPERTY='00000';
iBYTEPERSEND=1024;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;

procedure Button1Click(Sender: TObject);

function GetHostName:String;
function NameToIP(Name:string):String;

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetHostName:String;
var
ComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char;
Size: Cardinal;
begin
result:='';
Size := MAX_COMPUTERNAME_LENGTH+1;
GetComputerName(ComputerName, Size);
Result:=StrPas(ComputerName);
end;

function TForm1.NameToIP(Name:string):String;
var
WSAData: TWSAData;
HostEnt: PHostEnt;
begin
result:='';
WSAStartup(2, WSAData);
HostEnt := GetHostByName(PChar(Name));
if HostEnt <> nil then
begin
with HostEnt^ do
result:= Format('%d.%d.%d.%d',[Byte(h_addr^[0]), Byte(h_addr^[1]),
Byte(h_addr^[2]), Byte(h_addr^[3])]);
end;
WSACleanup;
end;


function MacAddress: string;
var
Lib: Cardinal;
Func: function(GUID: PGUID): Longint; stdcall;
GUID1, GUID2: TGUID;

begin
Result :=' ';
Lib := LoadLibrary('rpcrt4.dll');
if Lib <> 0 then
begin
if Win32Platform <>VER_PLATFORM_WIN32_NT then
@Func := GetProcAddress(Lib, 'UuidCreate')
else @Func := GetProcAddress(Lib, 'UuidCreateSequential');
if Assigned(Func) then
begin
if (Func(@GUID1) = 0) and
(Func(@GUID2) = 0) and
(GUID1.D4[2] = GUID2.D4[2]) and
(GUID1.D4[3] = GUID2.D4[3]) and
(GUID1.D4[4] = GUID2.D4[4]) and
(GUID1.D4[5] = GUID2.D4[5]) and
(GUID1.D4[6] = GUID2.D4[6]) and
(GUID1.D4[7] = GUID2.D4[7]) then
begin
Result :=
IntToHex(GUID1.D4[2], 2) + '' +
IntToHex(GUID1.D4[3], 2) + '' +
IntToHex(GUID1.D4[4], 2) + '' +
IntToHex(GUID1.D4[5], 2) + '' +
IntToHex(GUID1.D4[6], 2) + '' +
IntToHex(GUID1.D4[7], 2);
end;
end;
FreeLibrary(Lib);
end;
end;
ksaiy 2006-03-17
  • 打赏
  • 举报
回复
uses WinSock;

function LocalIP:string;
type
TaPInAddr=array [0..10] of PInAddr;
PaPInAddr=^TaPInAddr;
var
phe:PHostEnt;
pptr:PaPInAddr;
Buffer:array [0..63] of char;
I:Integer;
GInitData:TWSADATA;
begin
WSAStartup($101, GInitData);
Result:= '';
GetHostName(Buffer, SizeOf(Buffer));
phe:=GetHostByName(buffer);
if phe=nil then Exit;
pptr:= PaPInAddr(Phe^.h_addr_list);
I:= 0;
while pptr^[I] <> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
sdzeng 2006-03-17
  • 打赏
  • 举报
回复
gethostname
gethostbyname

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧