Q&A

  • indyICMP 를 쓰레드로 사용할때(예제첨부)
소스를 보시면
각쓰레드 별로 idICMP를 생성하여
지정된 IP로 Ping을 날려서 결과값을
TListView에 표시하도록 되어 있습니다.
그런데 문제는 쓰레드간에 ICMP컴포넌트의
ReplayStatus값이 간섭을 일으키는 것같습니다.
인디 버전은 9.0 대 최종 버전입니다.
1  COMMENTS
  • Profile
    이중철 2005.11.17 23:45
    PING, ICMP는 복수스레드로 구현이 불가능 합니다.

    이것을 모르고 PING ALIVE CHEK를 스레드를 구현하곤 합니다.

    질답란 보면 가끔씩 PING을 스레드로 구현하고 서로 간섭을 일으킨다고 하는데

    이는 구조적으로 어쩔 수 없습니다.

    다른 통신 방식 (TCP, UDP)은 Host 접속시 Destination Port, Source Port라는 것이

    존재합니다. 이경우 Destination의 하나의 포트에 접속시 Source Port를 바꾸어 가면서

    여러개(최대 65000)의 스레드로 구현이 가능하지만 ICMP는 이 포트라는 것이 아예 없습니다.

    즉, 창구가 하나 입니다.

    하나의 창구로 오는 정보는 멀티스레드로 구현하더라도 먼저 캐치하는 스레드가 받게됩니다.

    결국 어떤 스레드가 전송해서 어떤 스레드가 받는지를 보장하지 못합니다.

    또한, 해당 프로그램이 핑으로 폴링하고 있는데 다른 프로그램이 해당 Destination에 Ping을 하여도

    간섭이 일어납니다. 결국, 일반적인 핑은 하나의 컴퓨터(정확히 말하면 Interface당)에 오로지 하나의

    프로그램만이 유효합니다.