Q&A

  • IdIcmpClient (ICMP) 로 Ping할때...
안녕하세요..!! 델초보입니다...

다름이 아니오고 델파이 데모폴더에 잇는 내용인데요..!!

Ping을 해서 ListBox에 정보를 보여주는 내용입니다.(데모폴더에 있는게..)

근데..이 내용늘 ListView로 필드를 구성해서 보여주려고 합니다..

근데..컴파일이 안되더군요..!!

사용하는 형식이 달라서 인가요..!!

고수님들께..도움을 요청합니다..

procedure TForm1.ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
var
  sTime : String;
begin
    if (ReplyStatus.MsRoundTripTime = 0)then
       sTime := '<1'
    else
       sTime := '=';

    ListItem := ListView1.Items.Add;
    ListItem.Caption := ReplyStatus.FromIpAddress;
    ListItem.SubItems(ReplyStatus.BytesReceived);    ---> 여기서 부터 넘어가질 않네요.!! (Missing operator or semicolon 이라고 에러가나오네요..)
    ListView1.Items.Add.SubItems(ReplyStatus.SequenceId);
    ListView1.Items.Add.SubItems(ReplyStatus.TimeToLive);
    ListView1.Items.Add.SubItems(sTime);
    LsitView1.Items.Add.SubItems(ReplyStatus.MsRoundTripTime);
2  COMMENTS
  • Profile
    강민주 2002.09.04 01:20

    BytesReceived는 Integer형이라.. 문자열로 변환후 넣으셔야 컴파일이 됩니다.

    AItem := ListView1.Items.Add;
    AItem.Caption := ReplyStatus.FromIpAddress;
    AItem.SubItems.Add(IntToStr(ReplyStatus.SequenceId));
    AItem.SubItems(IntToStr(ReplyStatus.TimeToLive));

    이런식으로 하심 됩니다.

    그럼..20000.
  • Profile
    최수림 2002.09.04 02:53
    등록된 IP Address 만큼 Ping을 하여 네트워크 상태를 확인하려고 합니다.

    간단히 thread를 적용시켜서..작성해보았는데...

    웬지 모르게..허접한 거 같아서.고수님들께...

    여쭤볼려고 합니다....부디 저에게 가르침을 주시기 바랍니다..

    쓰레드도 처음 사용해서..이렇게 적용한게 맞는지 확인 부탁드립니다.

    사용 예는 특정 IP를 등록시키면 ListView에 등록이 됩니다..!!

    여기서 버튼을 누르면 ListView의 등록된 IP마다 체크하여..Ping한 정보를

    ListView에 등록된 IP (ListView.Items.Add.Caption) 이 되껫죠..

    이 IP 옆에 subItem 으로  정보가 보여지게.할려고 하는데...

    아래..소스는 등록된 IP 밑에..서부터..정보가 보여집니다..

    왜.그런지..아무래도 적용이 잘못 된거 같은데..요..확인 부탁드리겟습니다.

    조금더 나아가서는 등록된 IP체크후 일정시간이 지나면 다시 첨으로

    돌아가서..Ping을 하는 걸 할려고 하거든요..

    예...
    ==================================================================
    211.61.40.41   --> ListView 에 등록된 IP
    211.61.40.42         Ping을 하면 해당 IP 옆에 정보를 보여줄려고 합니다.
    ..                        근데..지그은 IP 등록된 맨 마지막줄 다음부터 정보가 나옵니다.
    .
    ===================================================================
    버튼클릭
    ====================================================================
    211.61.40.41    72 bytes  ttl = 255 ..... 이런식으로 IP 옆에 나오게 하려는데.

    ===================================================================
      TMyThread2 = class(TThread)
      protected
        procedure Execute; override;
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TMyThread2.Execute;
    var
       I : Integer;
    begin
        Form1.ICMP.OnReply := Form1.ICMPReply;

       form1.ListView1.Items.Clear;

       for I := 0 to Form1.ListView2.Items.Count-1 do
       begin
          Form1.ICMP.Host := Form1.ListView2.Items[i].Caption;
          Form1.ICMP.Ping;
          Application.ProcessMessages;
       end;
    end;

    procedure TForm1.Button4Click(Sender: TObject);
    var
       MyThread2 : TMyThread2;
    begin
       // 쓰레드를 시작한다.
       MyThread2 :=TMyThread2.Create(False);
       // 우선 순위가 조금 높은 쓰레드
       MyThread2.Priority := tpHigher;

    end;

    procedure TForm1.ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
    var
      sTime : String;
      ListItem : TListItem;
      i : Integer;
    begin
        if (ReplyStatus.MsRoundTripTime = 0)then
           sTime := '<1'
        else
           sTime := '=';

        ListItem := ListView1.Items.Add;
        ListItem.Caption:= ReplyStatus.FromIpAddress;
        ListItem.SubItems.Add(IntToStr(ReplyStatus.BytesReceived));
        ListItem.SubItems.Add(IntToStr(ReplyStatus.SequenceId));
        ListItem.SubItems.Add(IntToStr(ReplyStatus.TimeToLive));
        ListItem.SubItems.Add(sTime);
        ListItem.SubItems.Add(IntToStr(ReplyStatus.MsRoundTripTime));


    end;