1、在网络中,仅仅知道用户名是不行的,因为同一个用户帐号可以同时登陆到几台机器;
2、如果知道对方的域名或局域网的机器名,可以用以下的过程:
procedure TForm1.ProcedureName(Sender: TObject);
var
phe : PHostEnt;
Buffer : array [0..63] of char;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData); //初始化WinSock
Buffer := 'www.ibm.com'; //或对方局域网的机器名
phe := GetHostByName(Buffer);
//phe^.h_addr^就包含了对方的IP Address,以Char的形式表示,必须转换;
//phe^.h_Length为IP Address的长度
if phe <> nil then
begin
StrLCopy(Buffer, phe^.h_addr^, phe^.h_Length);
MessageBox(Handle, PChar(Format('%d.%d.%d.%d', [Ord(Buffer[0]), Ord(Buffer[1]), Ord(Buffer[2]), Ord(Buffer[3])])), 'IP Address', mb_ok);
end;
WSACleanup; //释放WinSock
end;
2、如果知道对方的域名或局域网的机器名,可以用以下的过程:
procedure TForm1.ProcedureName(Sender: TObject);
var
phe : PHostEnt;
Buffer : array [0..63] of char;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData); //初始化WinSock
Buffer := 'www.ibm.com'; //或对方局域网的机器名
phe := GetHostByName(Buffer);
//phe^.h_addr^就包含了对方的IP Address,以Char的形式表示,必须转换;
//phe^.h_Length为IP Address的长度
if phe <> nil then
begin
StrLCopy(Buffer, phe^.h_addr^, phe^.h_Length);
MessageBox(Handle, PChar(Format('%d.%d.%d.%d', [Ord(Buffer[0]), Ord(Buffer[1]), Ord(Buffer[2]), Ord(Buffer[3])])), 'IP Address', mb_ok);
end;
WSACleanup; //释放WinSock
end;
Sorry是什么意思,是不是我的方法不行?可我刚试过的呀。譬如:
...
Buffer := MyComputerName;
...
将得到我的主机地址。
请参阅
√简单检测远程机器是否可达!!!!!!!!(Zhong) [Delphi]
为什么?谢谢Lin的源程序!
不会吧?有没有抄错?
我刚才试过了,在局域网上可以保证是一样的(因为机器名唯一);在Internet上不能保证是一样,因为为了提高效能,可能有好几台或者几十台镜像机器有同一个域名而有不同的IP地址。
到时候分肯定给你了!
对不起,网络质量不太好。能否给我你的测试程序?因为我测试是可以的。
解决方法有二:
1、如果你的局域网有服务器的话,给服务器添加DNS服务;
2、如果没有的话,可以本地解析,参照下面的例子编辑HOSTS文件放在System目录下。# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
127.0.0.1 localhost #本机地址
www.xxx.yyy.zzz YourComputerName
(Ctrl+c, Ctrl+V, 点回复,分来,哈哈)