请教WinSock编程中的一个小问题?(30分)

  • 主题发起人 主题发起人 Archerfl
  • 开始时间 开始时间
A

Archerfl

Unregistered / Unconfirmed
GUEST, unregistred user!
我的代码如下:
uses Winsock;

procedure TForm1.Button1Click(Sender: TObject);
var
wsaData: TWSAData;
hostRecord: PHostEnt;
inaddr: in_addr;
begin
WSAStartup(MakeWord(2,0), wsaData);
hostRecord := gethostbyname('localhost');
inaddr.S_addr := LongInt(hostRecord.h_addr);
ShowMessage('Local IP = ' + inet_ntoa(inaddr));
WSACleanup;
end;
如上的程序是直接用WinSock API写成的,我想通过gethostbyname得到主机信息,进面获得相应主机名称下的主机当前IP值,但是,不知道程序是哪里的问题,显示的结果总是和我在cmd下用ipconfig显示出来的本机IP地址对应不上,不知道是为什么?
请高手指点,谢!
 
呵呵,虽然我没有看代码,不过好像 'localhost' 总是显示 : 127.0.0.1 吧,而不显示实际的Ip地址.
 

{=================================================================
功 能: 返回本机的局域网Ip地址
参 数: 无
返回值: 成功: True, 并填充LocalIp 失败: False
备 注:
版 本:
1.0 2002/10/02 21:05:00
=================================================================}
function GetLocalIP(var LocalIp: string): Boolean;
var
HostEnt: PHostEnt;
Ip: string;
addr: pchar;
Buffer: array [0..63] of char;
GInitData: TWSADATA;
begin
Result := False;
try
WSAStartup(2, GInitData);
GetHostName(Buffer, SizeOf(Buffer));
HostEnt := GetHostByName(buffer);
if HostEnt = nil then Exit;
addr := HostEnt^.h_addr_list^;
ip := Format('%d.%d.%d.%d', [byte(addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])]);
LocalIp := Ip;
Result := True;
finally
WSACleanup;
end;
end;

这是网上的一个得到本机的IP的,看看了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
599
import
I
后退
顶部