안녕하세요?
제 컴퓨터 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-->
전에 보니 borland.com이나 naver.com같은 곳은 막아 놓았고 mbc.com 같은 곳은 열어 놓았더군요.
결론적으로 icmp로 상대방서버가 살아 있는지를 체크한다는 것은 요즘은 불가능합니다.