Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
IP가 살았는지 죽었는지 체크방법
컴퓨터가 네트워크에 참여하고 있는지 알고 싶어요... 간단한 방법 없을까요?
ping을 사용하여 봤지만....
죽어있을 경우에는 확인하는데 시간이 너무 걸리더라구요....
제 경우에는 ip체크만 합니다....
부탁드릴께요... 그럼 수고하십시오~~
3
COMMENTS
김영대
•
1999.09.15 22:43
이광주 wrote:
> 컴퓨터가 네트워크에 참여하고 있는지 알고 싶어요... 간단한 방법 없을까요?
> ping을 사용하여 봤지만....
> 죽어있을 경우에는 확인하는데 시간이 너무 걸리더라구요....
> 제 경우에는 ip체크만 합니다....
> 부탁드릴께요... 그럼 수고하십시오~~
원도우즈의 네트워크는 두가지 protocol로 운영됩니다
그 둘은 NetBEUI와 TCP/IP 입니다
말씀하신 컴퓨터의 alive 검사는 물론 두가지 방법으로 검사할 수 있습니다
TCP/IP는 ICMP protocol을 사용하는 PING 으로..
NetBEUI는 WNet 으로 시작하는 API함수를 사용합니다
그런데 BetBEUI는 디렉토리 서비스를 이용한 alive 검사 이므로
속도면에서는 TCP/IP보다는 느릴 수 있습니다
제 생각에는 아직까지는 TCP/IP환경의 네트워크에서 PING을
이용하시는것이 효율적일것 같습니다
그리고 PING의 원리가 packet을 해당 컴퓨터에 보내어
다시 되돌아오는 방법을 사용하는데 컴퓨터가 다운된 상태라면
응답이 올리가 없고 이럴때는 일정한 시간이 경과한후 응답이 없을경우는
다운된걸로 보기 때문에 속도가 느립니다
참고로 아래는 NetBEUI를 사용한 방법입니다
디렉토리 서비스를 사용하기 때문에 다운된 컴퓨터도 응답이 올 수 있습니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function RemoteComputerExists(const ComputerName : String) : Boolean;
{
Returns True if the remote computer ComputerName exists on the network.
ComputerName must be of the form "Name". The function is not case-sensitive.
Be warned that this may take a *long* time to return.
Based on code supplied by:
Michael P. Bobowski
Atled Engineering Group
Milwaukee, WI
}
function Enumerate(lpnr : PNetResource; const ComputerName : String): Boolean;
type
TNetResourceArray = array[0..16383] of TNetResource;
PNetResourceArray = ^TNetResourceArray;
var
hEnum: THandle;
BufferSize, NumEntries, Entry: Integer;
lpnrLocalc: PNetResourceArray;
begin
Result := False;
if NO_ERROR <> WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0 {Usage: All resources}, lpnr, hEnum) then
begin
Exit;
end;
BufferSize := 16384; {16 kB}
{Get as many entries as possible; NumEntries will be set to the number actually read (if successfull)}
NumEntries := $FFFFFFFF;
lpnrLocalc := AllocMem(BufferSize);
repeat
case WNetEnumResource(hEnum, NumEntries, lpnrLocalc, BufferSize) of
NO_ERROR : begin
for Entry := 0 to (NumEntries - 1) do
begin
{lpnrLocalc^[Entry].dwScope will be RESOURCE_GLOBALNET since that is what we asked for}
if 0 = ANSICompareText(lpnrLocalc^[Entry].lpRemoteName,ComputerName) then
begin
{lpnrLocalc^[Entry].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER should also be True}
{RESOURCEUSAGE_CONTAINER = (lpnrLocalc^[Entry].dwUsage and RESOURCEUSAGE_CONTAINER) should also be True}
Result := True;
break;
end; {then}
{ResourceType is irrelevant}
if (lpnrLocalc^[Entry].dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN) or
(lpnrLocalc^[Entry].dwDisplayType = RESOURCEDISPLAYTYPE_NETWORK) then
begin
{Must recurse}
if RESOURCEUSAGE_CONTAINER = (lpnrLocalc^[Entry].dwUsage and RESOURCEUSAGE_CONTAINER) then
begin
{Recursion possible}
Result := Enumerate(@(lpnrLocalc^[Entry]), ComputerName);
if Result then
break;
end; {then}
end; {then}
end; {for}
end; {NO_ERROR}
ERROR_MORE_DATA : begin
{The buffer is too small for even one entry: increase the buffer...}
FreeMem(lpnrLocalc, BufferSize);
BufferSize := 2*BufferSize;
lpnrLocalc := AllocMem(BufferSize);
{...and try again}
end; {ERROR_MORE_DATA}
else
{
ERROR_NO_MORE_ITEMS (Enumeration is complete)
ERROR_INVALID_HANDLE (The handle given by the hEnum parameter is not valid)
ERROR_NO_NETWORK (No network is present)
ERROR_EXTENDED_ERROR (use WNetGetLastError for details)
}
break;
end; {case}
until Result;
FreeMem(lpnrLocalc, BufferSize);
WNetCloseEnum(hEnum);
end; {Enumerate}
begin
{Start enumeration at the root of the network}
Result := Enumerate(Nil, ComputerName);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Edit.Text에 컴퓨터 이름을 사용자가 입력함
if Pos('', Edit1.Text) = 0 then
Edit1.Text := ''+Edit1.Text;
if RemoteComputerExists(Edit1.Text) then
ShowMessage('네트워크 컴퓨터가 존재합니다 ')
else
ShowMessage('네트워크 컴퓨터가 존재하지 않습니다 ');
end;
end.
0
0
삭제
수정
댓글
바보
•
2000.01.29 08:35
방법이 하나 더 있습니다.
심장이 뛰는지 들어보면 되구요. 아니면 맥박을 확인하든지...
0
0
삭제
수정
댓글
구창민
•
1999.09.15 18:43
이광주 wrote:
> 컴퓨터가 네트워크에 참여하고 있는지 알고 싶어요... 간단한 방법 없을까요?
> ping을 사용하여 봤지만....
> 죽어있을 경우에는 확인하는데 시간이 너무 걸리더라구요....
> 제 경우에는 ip체크만 합니다....
> 부탁드릴께요... 그럼 수고하십시오~~
이광주님 안녕하세요?
ICS컴포넌트를 사용해 보셨나요?
사용해 보시지 않았다면 권장드립니다.
훌륭한 컴포넌트입니다.
예제도 친절히 작성되어 있구요.
Ping테스트예제도 있었던거 같네요.
원하시는 기능을 구현하실수 있지 않을까 생각됩니다.
그럼.. 즐거운 프로그래밍 되시구요.
PS: ICS컴포넌트는 델파이 슈퍼페이지나
국내 사이트에서도 찾으실수 있을 겁니다.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
이광주
•
•
1999.09.15 08:16
3
COMMENTS
/
10
LIKES
IP가 살았는지 죽었는지 체크방법
컴퓨터가 네트워크에 참여하고 있는지 알고 싶어요... 간단한 방법 없을까요? ping을 사용하여 봤지만.... 죽어있을 경우에는 확인하는데 시간이 너무 걸리더라구요.... 제 경우에는 ip체크만 합니다.... 부탁드릴께요... 그럼 수고하십시...
김영대
•
1999.09.15 22:43
이광주 wrote: > 컴퓨터가 네트워크에 참여하고 있는지 알고 싶어요... 간단한 방법 없을까요? > ping을 ...
바보
•
2000.01.29 08:35
방법이 하나 더 있습니다. 심장이 뛰는지 들어보면 되구요. 아니면 맥박을 확인하든지...
구창민
•
1999.09.15 18:43
이광주 wrote: > 컴퓨터가 네트워크에 참여하고 있는지 알고 싶어요... 간단한 방법 없을까요? > ping을 ...
이현철
•
1999.09.15 07:50
2
COMMENTS
/
0
LIKES
Active Server Component 에 대한 자료좀..
test
•
2000.04.03 08:56
이현철 wrote: > Active Server Component에 대한 자료를 구하고 싶어요. > asp를 공부하고 있는데.. 비...
화랑
•
1999.09.19 23:38
안녕하세요.. 화랑입니다.. 물론 델파이로 Active Server com' 을 만들수 있습니다.. 기본적인 개념...
이정호
1999.09.15 06:36
0
COMMENTS
/
0
LIKES
C/C++의 구조체를 델파이에서 사용
강신구
•
1999.09.15 10:14
1
COMMENTS
/
0
LIKES
MDI에서 timer처리?
이준해
•
1999.09.16 04:12
공개된 소스를 약간 고쳐서 만든 Component 를 가지고 있습니다. 제사 수행한 프로젝트에 적용했던 것이라...
문성준
•
1999.09.15 03:47
1
COMMENTS
/
0
LIKES
SQL문 작성시 Field Editor관련 질문!!
이재식
•
1999.09.15 05:16
안녕하세요. 우선 친절한 인사에 대단히 감사드립니다. 그 에러는 많이들 겪는 에러입니다. 질문의 요지...
정성훈
•
1999.09.15 02:35
1
COMMENTS
/
0
LIKES
오라클에서 IMAGE가 저장이 안되는군요
이재식
•
1999.09.15 04:30
정성훈 wrote: > 오라클 환경에서 IMAGE가 저장되는 DB를 만들려고 합니다 > PARADOX는 타입이 IMAGE가 ...
송광수
1999.09.15 02:33
0
COMMENTS
/
0
LIKES
[Compile Error] Constant expression violate sub...
하늘소
1999.09.15 05:39
0
COMMENTS
/
0
LIKES
Pointer로 Record를 Mapping할때 Error처리는 ?
이상환
•
1999.09.15 01:51
2
COMMENTS
/
0
LIKES
기본 웹브라우저 알기
박지훈.임프
•
1999.10.24 20:51
이상환 wrote: > 현재 pc에서 기본 웹브라우저(netscape 또는 explorer)가 무엇인지 알고자 할때? > 델파...
구창민
•
1999.09.15 02:02
이상환 wrote: > 현재 pc에서 기본 웹브라우저(netscape 또는 explorer)가 무엇인지 알고자 할때? > 델파...
이상환
1999.09.15 01:51
0
COMMENTS
/
0
LIKES
기본 웹브라우저 알기
델초보
1999.09.15 00:39
0
COMMENTS
/
0
LIKES
리소스 에러....
tedeum
•
1999.09.15 00:11
1
COMMENTS
/
0
LIKES
dbgrid 편집하기...
최수영
•
1999.09.15 01:55
tedeum wrote: > select문으로 dbgrid에 조회된 내용을 > 사용자가 임의로 내용을 변경시킬수 있는 방법...
임성룡
•
1999.09.14 23:44
1
COMMENTS
/
0
LIKES
테이블 콤포넌트와 폼에 관하여...
구창민
•
1999.09.15 00:09
임성룡 wrote: > 1. 테이블 콤포넌트에 보면 Master source와 Master Field라는게 있는데, > 혹시 헤드...
문승진
•
1999.09.14 23:26
1
COMMENTS
/
0
LIKES
TQuery에서 CachedUpdates 사용하기
김고진
•
1999.09.15 02:39
문승진 wrote: > TQuery에서 CachedUpdates를 true로 놓고 사용을 하였는데 잘 안되네요. > > Query의 ...
김지혜
•
1999.09.14 23:12
1
COMMENTS
/
0
LIKES
질문]엑세스테이블의 내용이 델파이에 잘 뜨지 않아서..
삶지기
•
1999.09.15 00:01
김지혜 wrote: > 이와 비슷한 질문을 누군가 하셨길래 답변을 기다렸는데 올려지지 않아서 제가 다시 합니...
kouki
•
1999.09.14 23:02
3
COMMENTS
/
0
LIKES
델파이 포맷함수 아시는분.. & 소수점2째자리 반올림 ??
이준해
•
1999.09.16 06:38
function TForm1.roundedReal(inParam: real; roundPoint: Integer): Real; begin result := intpower(...
meari
•
1999.09.15 09:40
kouki wrote: > 안녕하세요? > 추석이 얼마남지 않았군요..그런데 날씨가 아직도 식을줄 모르는 군요 ^^;...
삶지기
•
1999.09.14 23:57
kouki wrote: > 안녕하세요? > 추석이 얼마남지 않았군요..그런데 날씨가 아직도 식을줄 모르는 군요 ^^;...
박성우
1999.09.14 22:35
0
COMMENTS
/
0
LIKES
C++빌더에서 델파이 함수를 호출할수 있다는데 어떻게..
맹주형
•
1999.09.14 21:45
1
COMMENTS
/
0
LIKES
sql에서 필드명 바꾸기
조복기
•
1999.09.14 21:55
안녕하세요.. 간만에 답변하네요.. 각 RDB마다 문법이 조금씩 틀리지만 파라독스같은경우에는 s...
김경래
1999.09.14 21:42
0
COMMENTS
/
0
LIKES
특정address에 쓰고 읽는 방법?
정종구
1999.09.14 20:00
0
COMMENTS
/
0
LIKES
SQL 7.0과 델파이 4.0인데 수정이 이상해서..
이광주
1999/09/15 08:16
Views
1081
Likes
10
Comments
3
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 컴퓨터가 네트워크에 참여하고 있는지 알고 싶어요... 간단한 방법 없을까요?
> ping을 사용하여 봤지만....
> 죽어있을 경우에는 확인하는데 시간이 너무 걸리더라구요....
> 제 경우에는 ip체크만 합니다....
> 부탁드릴께요... 그럼 수고하십시오~~
원도우즈의 네트워크는 두가지 protocol로 운영됩니다
그 둘은 NetBEUI와 TCP/IP 입니다
말씀하신 컴퓨터의 alive 검사는 물론 두가지 방법으로 검사할 수 있습니다
TCP/IP는 ICMP protocol을 사용하는 PING 으로..
NetBEUI는 WNet 으로 시작하는 API함수를 사용합니다
그런데 BetBEUI는 디렉토리 서비스를 이용한 alive 검사 이므로
속도면에서는 TCP/IP보다는 느릴 수 있습니다
제 생각에는 아직까지는 TCP/IP환경의 네트워크에서 PING을
이용하시는것이 효율적일것 같습니다
그리고 PING의 원리가 packet을 해당 컴퓨터에 보내어
다시 되돌아오는 방법을 사용하는데 컴퓨터가 다운된 상태라면
응답이 올리가 없고 이럴때는 일정한 시간이 경과한후 응답이 없을경우는
다운된걸로 보기 때문에 속도가 느립니다
참고로 아래는 NetBEUI를 사용한 방법입니다
디렉토리 서비스를 사용하기 때문에 다운된 컴퓨터도 응답이 올 수 있습니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function RemoteComputerExists(const ComputerName : String) : Boolean;
{
Returns True if the remote computer ComputerName exists on the network.
ComputerName must be of the form "Name". The function is not case-sensitive.
Be warned that this may take a *long* time to return.
Based on code supplied by:
Michael P. Bobowski
Atled Engineering Group
Milwaukee, WI
}
function Enumerate(lpnr : PNetResource; const ComputerName : String): Boolean;
type
TNetResourceArray = array[0..16383] of TNetResource;
PNetResourceArray = ^TNetResourceArray;
var
hEnum: THandle;
BufferSize, NumEntries, Entry: Integer;
lpnrLocalc: PNetResourceArray;
begin
Result := False;
if NO_ERROR <> WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0 {Usage: All resources}, lpnr, hEnum) then
begin
Exit;
end;
BufferSize := 16384; {16 kB}
{Get as many entries as possible; NumEntries will be set to the number actually read (if successfull)}
NumEntries := $FFFFFFFF;
lpnrLocalc := AllocMem(BufferSize);
repeat
case WNetEnumResource(hEnum, NumEntries, lpnrLocalc, BufferSize) of
NO_ERROR : begin
for Entry := 0 to (NumEntries - 1) do
begin
{lpnrLocalc^[Entry].dwScope will be RESOURCE_GLOBALNET since that is what we asked for}
if 0 = ANSICompareText(lpnrLocalc^[Entry].lpRemoteName,ComputerName) then
begin
{lpnrLocalc^[Entry].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER should also be True}
{RESOURCEUSAGE_CONTAINER = (lpnrLocalc^[Entry].dwUsage and RESOURCEUSAGE_CONTAINER) should also be True}
Result := True;
break;
end; {then}
{ResourceType is irrelevant}
if (lpnrLocalc^[Entry].dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN) or
(lpnrLocalc^[Entry].dwDisplayType = RESOURCEDISPLAYTYPE_NETWORK) then
begin
{Must recurse}
if RESOURCEUSAGE_CONTAINER = (lpnrLocalc^[Entry].dwUsage and RESOURCEUSAGE_CONTAINER) then
begin
{Recursion possible}
Result := Enumerate(@(lpnrLocalc^[Entry]), ComputerName);
if Result then
break;
end; {then}
end; {then}
end; {for}
end; {NO_ERROR}
ERROR_MORE_DATA : begin
{The buffer is too small for even one entry: increase the buffer...}
FreeMem(lpnrLocalc, BufferSize);
BufferSize := 2*BufferSize;
lpnrLocalc := AllocMem(BufferSize);
{...and try again}
end; {ERROR_MORE_DATA}
else
{
ERROR_NO_MORE_ITEMS (Enumeration is complete)
ERROR_INVALID_HANDLE (The handle given by the hEnum parameter is not valid)
ERROR_NO_NETWORK (No network is present)
ERROR_EXTENDED_ERROR (use WNetGetLastError for details)
}
break;
end; {case}
until Result;
FreeMem(lpnrLocalc, BufferSize);
WNetCloseEnum(hEnum);
end; {Enumerate}
begin
{Start enumeration at the root of the network}
Result := Enumerate(Nil, ComputerName);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Edit.Text에 컴퓨터 이름을 사용자가 입력함
if Pos('', Edit1.Text) = 0 then
Edit1.Text := ''+Edit1.Text;
if RemoteComputerExists(Edit1.Text) then
ShowMessage('네트워크 컴퓨터가 존재합니다 ')
else
ShowMessage('네트워크 컴퓨터가 존재하지 않습니다 ');
end;
end.