Q&A

  • CLIENT 비정상종료때 서버소켓이 감지하기?
소켓을 이용하여 채팅 프로그램을 만들었는데



클라이언트가 다운이 되거나 전원을 내렸을때



서버에 ClientDisconnect 에서 어떠한 이벤트도 발생하지 않네요....



도대체 어떻게 클라이언테의 Disconnect를 감지해야 하나요....



미티겠습니다.



아시는 고수님들 답변좀 부탁드립니다.

3  COMMENTS
  • Profile
    이경문 2001.04.24 04:50
    소켓 프로그래밍의 가장 어려운 점중의 하나라고 보셔도 됩니다.

    실제적으로 winsock상에서 TCP의 connect, disconnect event는

    상대방의 비정상적인 종료(프로그램이나 OS, H/W)에 대응하지 못합니다.

    즉 어플리케이션에서 그것들을 처리해야 되지요.

    가장많이 사용하는 방법중의 한가지는 keep alive packet을 사용하는 것입니다.

    예를 들면 tcp/ip program를 작성하였는데

    "최소한 클라이언트는 서버에서 1분에 한번은 keep alive packet을 보내야 한다"라고 가정하고

    클라이언트가 서버에 접속되게 되면 55초마다 서버에 keep alive packet을 보내고

    서버는 1분동안 아무 패킷이 들어오지 않은 클라이언트는 죽어 있다고 가정을 하는 것이지요.

    도움이 되셨으면 좋겠네요....



    윤남준 wrote:

    > 소켓을 이용하여 채팅 프로그램을 만들었는데

    >

    > 클라이언트가 다운이 되거나 전원을 내렸을때

    >

    > 서버에 ClientDisconnect 에서 어떠한 이벤트도 발생하지 않네요....

    >

    > 도대체 어떻게 클라이언테의 Disconnect를 감지해야 하나요....

    >

    > 미티겠습니다.

    >

    > 아시는 고수님들 답변좀 부탁드립니다.

  • Profile
    윤남준 2001.04.24 05:16
    무지무지 감사합니다.

    만들면서 ICQ나 MSN 을 생각해서 그렇게 하면 너무 많은

    사용자가 접속중이면 트레픽과 리소스를 잡아먹지는 않을까 했었는데....

    설명해주신 방법을 사용하는 방법이 좋을거 같네요

    많은 도움
  • Profile
    이경문 2001.04.24 06:33
    참고로 말씀드립니다. ICQ는 UDP를 사용하고 있습니다(MSN은 모르겠슴).

    UDP는 connectionless 방식이어서 상대방이 연결을 끊었는지에 대한

    차제적인(UDP차원에서) 방법이 없습니다.

    즉 Application에서 그렇 것들을 처리하고 있다는 것입니다.



    윤남준 wrote:

    > 무지무지 감사합니다.

    > 만들면서 ICQ나 MSN 을 생각해서 그렇게 하면 너무 많은

    > 사용자가 접속중이면 트레픽과 리소스를 잡아먹지는 않을까 했었는데....

    > 설명해주신 방법을 사용하는 방법이 좋을거 같네요

    > 많은 도움