请问如何判断局域网中是否存在附某一个IP地址呢??(20分)

  • 主题发起人 主题发起人 inbreak
  • 开始时间 开始时间
I

inbreak

Unregistered / Unconfirmed
GUEST, unregistred user!
如题!!

如。。我想知道局域网内是否存在有 192.168.0.15 这台机。。

请问如果编程可以判断它是否存在呢??

请给出源码。。谢谢
 
ping它一下就可以了,看看能不能收到消息。如果你在做网络编程的话,这个不难吧。
 
to cozo :
用ping 命令。。。打开 command 方式???
我要的是编程方式。。。就想象
if 判断是否存在 then 作我的一些事情。。。

难道你要我现 ping .看看通不通。但选择是否执行我的程序吗???
 
ping 192.168.0.15 >1.txt
稍后读取1.txt
深一点的话,就直接用WINSOCK了
 
to stuwei:
我想知道用winsock 的方法。。
 
在线等待~~~~~~~~~~~~~~~~~~~~

分不够再加~~~~~~~~
 
//use WinSock;

function GetHostFromIP(ip: string): string;
var
sData: TWSAData;
h: PHostEnt;
p: TInAddr;
begin
Result := '';
//CheckIP;//检查IP是否合法,你自己写
// if (not CheckIP) or (WSAStartup($101, sData)) = SOCKET_ERROR then Exit;
if WSAStartup($101, sData) = SOCKET_ERROR then Exit;
p.S_addr := inet_addr(PChar(ip));

h := gethostbyaddr(@p.S_addr, 4, AF_INET);
if h <> nil then Result := h^.h_name;
WSACleanup;
end;

if GetHostFromIP('192.168.0.1') = '' then //没有这个IP地址
 
C:/Program Files/Borland/Delphi6/Source/Internet/Sockets.pas
第767行
function TIpSocket.LookupHostName(const ipaddr: string): TSocketHost;
和上面的函数差不多
 
to 独帅:
我试过你的函数了。。
if GetHostFromIP('192.168.0.1') = '' then showmessage('没有') else showmessage('有');
可是当我把 192.168.0.1 换成 192.168.0.2( 2..255 ) 。判断的结果都是有。而实际上,我的局域网中只有
192.168.0.1 至 192.168.0.17 。。。18以上都没有。可是这个函数的结果都是有。
请问????这是什么原因呀!??!谢谢!!
 
to 独帅:
请看: if GetHostFromIP(Combobox1.Text ) ='' then
showmessage('没有这个IP地址')
else
showmessage('有这个IP地址'+' | '+GetHostFromIP(Combobox1.Text ));

1.当我的 Combobox1.text :=192.168.0.15 (注:确定存在的。我这台电脑就是这个IP)。。则
showmessage('有这个IP地址'+' | '+GetHostFromIP(Combobox1.Text )) 的结果是:
有这个IP地址 | inbreak.prosperity-yenne.com (注:inbreak.prosperity-yenne.com
是本机的完整的计算机名。本机是属于prosperity-yenne.com 域的)
2.当我的 combobox1.text:=192.168.0.55(不存在的地址。)。。则
showmessage('有这个IP地址'+' | '+GetHostFromIP(Combobox1.Text )) 的结果是:
有这个IP地址 | ip-55-0-168-192.rev.dyxnet.com(不明白此为何。好象没有看到过)

3.当我的 combobox1.text:=192.168.0.7(确实存在的地址。)。。则
showmessage('有这个IP地址'+' | '+GetHostFromIP(Combobox1.Text )) 的结果是:
有这个IP地址 | ip-7-0-168-192.rev.dyxnet.com(不明白此为何。好象没有看到过)
所以。。请问如果解决。。。

按这里返回
 
在线等待~~~~~~~~~~~~~~~~~~~~
 
在线等待~~~~~~~~~~~~~~~~~~~~
 
to inbreak
留下你的QQ和mail

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, winsock;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function GetHostFromIP(ip: string): string;
var
sData: TWSAData;
h: PHostEnt;
p: TInAddr;
begin
Result := '';
//CheckIP;//检查IP是否合法,你自己写
// if (not CheckIP) or (WSAStartup($101, sData)) = SOCKET_ERROR then Exit;
if WSAStartup($101, sData) = SOCKET_ERROR then Exit;
p.S_addr := inet_addr(PChar(ip));

h := gethostbyaddr(@p.S_addr, 4, AF_INET);
if h <> nil then Result := h^.h_name;
WSACleanup;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if GetHostFromIP('192.168.0.1') = '' then
showmessage('没有这个IP地址')
else
showmessage('有这个IP地址');
end;

end.
 
to 老人家:
QQ:58580405 或 93954 或 9845550
Email:luozs168@163.net 或 luoroc@163.com
 
在线等待~~~~~~~~~~~~~~~~~~~~
 
接受答案了.
 
后退
顶部