关于判断计算机是否在线(别人的机子,不是自己的) ( 积分: 100 )

  • 主题发起人 主题发起人 leiming000001
  • 开始时间 开始时间
L

leiming000001

Unregistered / Unconfirmed
GUEST, unregistred user!
给出一张ip列表单,然后让程序判断这些ip的机子是否在线,在线了一种图片显示,否则灰色显示,网络有可能有交换机什么的,请大家给点意见,最好有原码
也请大家考虑效率的问题,我想过用ping的方法,但是100多台机子,ping一边是不是很费时间,另外就是如果对方机子有防火墙的话,是ping不通的
请大家多帮助,谢谢,先送100分,不够再加,解决问题重要,绝不食言
 
给出一张ip列表单,然后让程序判断这些ip的机子是否在线,在线了一种图片显示,否则灰色显示,网络有可能有交换机什么的,请大家给点意见,最好有原码
也请大家考虑效率的问题,我想过用ping的方法,但是100多台机子,ping一边是不是很费时间,另外就是如果对方机子有防火墙的话,是ping不通的
请大家多帮助,谢谢,先送100分,不够再加,解决问题重要,绝不食言
 
大家能不能给点帮助啊,怎么每次问题都问得那么到位,不会又问到大家都不会得了吧,没那么巧吧........
 
列举工作组,及工作组的机子
 
看见你的id都要顶!!我的名字也是leiming
 
我还真不会。顶一下
 
to dos1234
可是如果不光是一个工作组里面的呢,能具体些吗
to 高山云雾
呵呵,这么巧,你是哪的人,能认识一下吗
我的qq:249155303
to all
请大家帮忙啊
 
希望对你有帮助
function findcomputer (computername:string):boolean;
var wsadata:twsadata;
hostent:phostent;
begin
result:=true;
wsastartup(2,wsadata);
hostent:=gethostbyname(pchar(computername));
if hostent=nil then result:=false;
wsacleanup;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if findcomputer(edit1.Text)=true then
showmessage(edit1.Text+'在局域网上!')
else
showmessage(edit1.Text+'不在局域网上!')
end;
 
对指定IP取计算机名,取到为在线,取不到不在线
 
我觉得还是在其它机子上想办法吧,想办法装个服务器,你只在那里等就行了,来了自己报到,明的不能装就暗的装,如果那些机子的用户都是些高手级的人物,那就没法了,不过一般情况下不会每个人都是计算机高手的
 
问题已经的到了解决,方法如下
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
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;
可是这种方法,速度比较慢,不知谁有更好的办法
 
你可以设置超时短一点,并采取多线程,这样效率就有了。
我来领分的~~~:)
 
你看这个对你是否有帮助吧
KeyLife富翁笔记
作者?: andy263
标题?: 检验是否存在网络连接
关键字: WinInet,网络连接
分类?: 个人专区
密级?: 公开
(评分: , 回复: 0, 阅读: 68) »»
USES
WinInet;
..
..

function InternetConnected: Boolean;
CONST
// local system uses a modem to connect to the Internet.
INTERNET_CONNECTION_MODEM = 1;
// local system uses a local area network to connect to the Internet.
INTERNET_CONNECTION_LAN = 2;
// local system uses a proxy server to connect to the Internet.
INTERNET_CONNECTION_PROXY = 4;
// local system's modem is busy with a non-Internet connection.
INTERNET_CONNECTION_MODEM_BUSY = 8;

VAR
dwConnectionTypes : DWORD;
BEGIN
dwConnectionTypes :=
INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@dwConnectionTypes,0);
END;

 
最简单的方法,用优化大师,不管有没有防火墙都可以知道机是否在线,而且很快,20S就搞定1~254的所有端口!
 
这个方法好象是根据机器名称获得IP地址的函数啊,和你说的根据IP判断机子是否在线好象不一样哦!
 
用ADDCONNECT2函数试试!
 
多谢各位的帮助
 
多人接受答案了。
 
后退
顶部