当我机器里设有多个IP地址时,用什么办法可全都测出,要程序实现的。(50分)

  • 主题发起人 主题发起人 op
  • 开始时间 开始时间
读注册表中Hkey_local_machine/system/class/nettrans下的所有键
000/001/002... 再分别读出ipaddress就行了.
 
先读
HKEY_LOCAL_MACHINE/Enum/Network/MSTCP
 
好像不行,我现在就在上网,但注册表里找不到我现在的IP。
最好能像用ipconfig一样动态提取最新的IP,我知道TServerSocket和TFinger可以,但它们只能查出一个IP地址,而且好像也大才小用了。
另外,我这里还有段代码,但好像也不管用:
void GetIP(void)
{
char szHostName[128];
const char* pszAddr;
struct hostent * pHost;
if(gethostname(szHostName,128)==0) {
pHost=gethostbyname(szHostName);
for(int i=0;pHost!=NULL && pHost->h_addr_list!=NULL;i++) {
pszAddr=inet_ntoa(*(struct in_addr*)pHost->h_addr_list);
Form1->Memo1->Lines->Append(pszAddr);
}
}
}
哪位高手能给我一个指点。
 
winshoes里有一个TWinshoeIPWatch Component可以做到。
到<a href=http://www.pbe.com/SourceWorks/Winshoes/>http://www.pbe.com/SourceWorks/Winshoes/</a>下载一个试试看,有源代码。
 
我很久以前写过一个Ping程序,以下是其中的片断,可以获取本机的IP地址列表,但
我从来没有使用过拨号网络,在使用固定的IP地址或DHCP时都可以,不知在拨号网络
的情况下是否有效,你可以试一试。
(由于原程序是一个窗口程序,摘出来时稍作修改)

// 使用WinSock单元

type
TAddrList = array [0..1] of PInAddr;
PAddrList = ^TAddrList;

var
R : PHostEnt;
WSAData : TWSAData;
P: PAddrList;
Q: PAliasesList;
I : Integer;
Addr: TStrings; // 地址列表

begin
WSAStartup($101, WSAData);
R := GetHostByName('');
if R<>nil then begin
Addr := TStrings.Create;
Addr.Clear;
I := 0;
P := PAddrList(R^.h_Addr_list);
while P <> nil do begin
Addr.Add(StrPas(inet_ntoa(P^)));
Inc(I)
end
end;
WSACleanup;
 
end or continue??
 
又如何建立绑定不同ip的socket呢?
 
多人接受答案了。
 
后退
顶部