2012-07-20 2 views
1

간단히 말해서 tcplistener/tcpclient를 사용하여 서버를 설정했고 몇 대의 클라이언트 컴퓨터가 있습니다. 클라이언트가 연결 해제되었는지 여부를 감지하도록 시스템을 설정하지 않은 것을 제외하면 모든 것이 잘 작동합니다. 클라이언트가 여전히 존재 함을 보여주기 위해 하트 비트 (주기적으로 보낸 패킷)를 사용하고 싶습니다. 불행하게도 서버에서 클라이언트로부터 실제 데이터를 가져올 수 있도록 대기중인 수신 블록이 있지만 대신 하트 비트를 수신하고 있습니다. 하트 비트를 특별히 찾고있는 동일한 포트에서 다른 수신을 설정할 수있는 방법이 있습니까? -감사.실제 데이터 반환에서 클라이언트 하트 비트 정렬?

+0

지금까지 시도한 코드를 제공해 주실 수 있습니까? – peacemaker

+0

@peacemaker 조금 길다. (천 라인 이상); 거기에 당신이 대답하는 데 도움이 될 설명 (또는 여기에 게시) 할 필요가 내 코드의 어떤 측면입니까? – Ari

+0

질문과 관련된 부분 만. 너무 많은 코드 인 경우 주요 문제를 보여주는 간단한 예제를 만들어보십시오. – peacemaker

답변

1

일반적인 방법 중 하나는 패킷을 특정 유형으로 정의하는 것이므로 서버 패킷 수신 코드는 유형을 확인하고 적절하게 처리 할 수 ​​있습니다. 즉

if (packet.type == PacketTypes.HeartBeat) 
    //keep alive the client 
else 
    //it's data (or another packet) 

당신은 당신의 코드를 추가 할 때 내가 더 좋은 예를 제공 할 수 있습니다.

UPDATE :

코멘트에 우리의 토론 당으로서, 당신은 단순히 당신의 하트 비트 패킷을 처리하기위한 별도의 스레드를 생성 할 수 있습니다. 이 스레드에서 소켓 수신 코드는 먼저 유형을 확인하여 하트 비트 패킷을 무시합니다.

동일한 포트에서 소켓 수신을 처리하는 다른 스레드를 만들어 데이터를 처리 할 수도 있습니다. 이 경우 수신 된 하트 비트 패킷은 무시됩니다.

관련 문제