我想用API函数gethostbyname通过计算机名获得局域网中的计算机IP地址,看起来很简单可一运行发现输入我的计算机名能够获取到IP地址,但不能根据局域网中计算机名获取相应的IP地址,这是为啥?
解决方案 »
- 请问怎么把byte型数据合并为smallint?
- 如何动态显示DBGRID内的某一列,平时是隐藏的,要在DBGrid1ColExit内写代码,
- 谁有easygrid-v6控件的demo源代码,谢!
- 问了N次了,还没解决的问题,大家来看看。
- 关于存储过程得问题!
- [求]【图转数】资料
- 请教各位高手出现BDE问题:Insufficient Memory for This Operation怎么办???
- 介绍各地软件公司情况的红黑榜网站已做好,想转工的网友不能错过。
- 请问如何读出在dbgrid中某行某列的数据
- 兄弟们,如何在Delphi6.0中加入gif图片?
- 一个小问题,请问怎么在windows2k中屏蔽系统(alt+f4,ctl+alt+del等)功能键!多谢!
- VCL的HWND问题.
function GetLocalIP: 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;
uses WinSock;function HostToIP(Name: string; var Ip: string): Boolean;
var
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin
WSAStartup ($0101, wsdata);
try
gethostname (hostName, sizeof (hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname (hostName);
if Assigned (hostEnt) then
if Assigned (hostEnt^.h_addr_list) then begin
addr := hostEnt^.h_addr_list^;
if Assigned (addr) then begin
IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])]);
Result := True;
end
else
Result := False;
end
else
Result := False
else begin
Result := False;
end;
finally
WSACleanup;
end;
end;