Q&A

  • 인터넷 라인을 확인하는 프로그램을 만들었는데요.
안녕하세요?
제 컴퓨터 2 대에서는 잘 작동을 하는데 어떤 컴퓨터에서는 오작동을 합니다.
실행을 하면 에러 메세지가 뜹니다.
원인을 아시는 분께서는 좀 알려 주시기 바랍니다.
안녕히 계세요.

<!--CodeS-->
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
  IdIcmpClient, ExtCtrls, StdCtrls, MPlayer;

type
  TForm1 = class(TForm)
    IdIcmpClient1: TIdIcmpClient;
    Timer1: TTimer;
    Bevel1: TBevel;
    Label1: TLabel;
    MediaPlayer1: TMediaPlayer;
    procedure Timer1Timer(Sender: TObject);
    procedure IdIcmpClient1Reply(ASender: TComponent;
      const AReplyStatus: TReplyStatus);
  private
    Hour, Minute, Minute2, Second, Second2, MiliSecond: Word;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  DecodeTime(Time, hour, minute, second, milisecond); // 핑 실행할 때의 시간을 저장
  Timer1.Enabled := False;
  try // 핑이 제대로 시작조차 될 수 없을 때를 위한 예외 처리
    IdIcmpClient1.Host := '168.126.63.1';
    IdIcmpClient1.Ping();
  except
    Label1.Caption := 'disconnected ...';
    MediaPlayer1.Play; // 경고음 발생
    ShowMessage('disconnected ...')
  end;
end;

procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
begin
  DecodeTime(Time, hour, minute2, second2, milisecond); // 핑 수신(타임 아웃 포함) 시간을 저장
  if (Minute = Minute2) and (Second + 3 <= Second2) then // 수신 때까지 걸린 시간을 비교하여 3 초 안에 들어오면 라인이 이상 없는 것으로 봄
  begin
    Label1.Caption := 'disconnected ...';
    MediaPlayer1.Play;
    ShowMessage('disconnected ...')
  end
  else
  begin
    Label1.Caption := 'line ok ...';
    Timer1.Enabled := True; // 핑 송신을 다시 가동
  end;
end;

end.
<!--CodeE-->
2  COMMENTS
  • Profile
    채팅 2006.04.20 21:23
    아마 상대편에서 icmp패킷처리를 방화벽으로 막아 놓았을 겁니다.
    전에 보니 borland.com이나 naver.com같은 곳은 막아 놓았고 mbc.com 같은 곳은 열어 놓았더군요.

    결론적으로 icmp로 상대방서버가 살아 있는지를 체크한다는 것은 요즘은 불가능합니다.



  • Profile
    김범진 2006.04.20 21:40
    안녕하세요?
    올려주신 글은 잘 읽었읍니다.
    제가 이해를 못했읍니다.
    '상대방'이라 함은 제가 핑 요청을 하는 서버를 말씀하시는 것인지요.
    위의 서버는 핑에 잘 응답합니다.
    이 프로그램은 제 컴퓨터에서는 잘 동작합니다.
    안되는 컴퓨터가 있는데 '올바른 win32'가 아니라는 에러 메세지를 내는 경우가 있고 그냥 '문제가 있어서' 종료한다며 오류 보냄 창을 내는 경우가 있읍니다.
    따라서 서버의 문제는 아닙니다.
    한 번 써보시길 바랍니다.
    안녕히 계세요.