2010-01-25 3 views
2

소켓 서버에 대한 클라이언트 관리를 구현하는 방법이 궁금합니다.소켓 서버 : 클라이언트 연결 관리

나는 클라이언트가 방금 다시 연결되었는지 여부 또는 새로운 클라이언트인지 여부를 알고 싶습니다. 나는 그것이 그렇게해서는 안된다는 것을 알고있다. 이 서버는 다소 일시적인 서버이지만 몇 시간 동안 만 사용해야합니다.

나는 모든 클라이언트가 자신의 GUID를 서버에 전달하도록 할 생각을하고있었습니다. 서버가 클라이언트를 "인식"하면 이전에 보유한 클라이언트의 연결을 제거 할 수 있습니다.

어떻게이 문제에 접근합니까? 아니면이 방법으로 완전히 부인할 수 있습니까?

감사합니다.

답변

2

TCP/IP를 사용하는 경우 IP 주소와 포트를 사용하여 클라이언트를 고유하게 식별 할 수 있습니다. 그리고 연결 해제 이벤트 후 연결을 제거 할 수 있습니다. IP 주소와 포트가 클라이언트를 고유하게 식별하기에 충분하지 않은 경우 GUID를 사용할 수 있습니다. 그리고 다시 TCP/IP를 사용하면 많은 경우 연결 해제 이벤트 후 연결을 제거 할 수 있습니다.

+0

감사합니다. GUID 접근 방식을 조금 더 따르고 싶습니다. 서버에 각 클라이언트의 GUID가 무엇인지 알려주는 경우에만 의미가 있습니다. 따라서'Socket'에서 파생되고 내 GUID를 추가해야합니다. 그런데 Socket의 모든 메소드를 처리하는 데 문제가 생겨서 Socket 인스턴스를 반환합니다. – rdoubleui

+1

대부분의 경우 상속 합성을 선호해야합니다. 내 말은, 당신이 Socket으로부터 상속받지 말아야한다는 것입니다. 대신 당신은 Socket과 GUID를 소유하는 클래스를 직접 만들어야합니다. 또는 서버 클래스에는 소켓이 키이고 값이 GUID 인 사전이 포함될 수 있습니다. –

+0

자, 요점을 봅니다. 그래도 내 목표는 서버와의 (GUID와의) 연결시 각 클라이언트를 식별하는 것이 었습니다. 연결시 첫 번째 메시지로 GUID를 보낼 수 있다고 생각합니다. 나는 그 일을하는 다른 방법을 찾지 못했지, 그렇지? 귀하의 의견을 보내 주셔서 감사합니다! – rdoubleui