2012-06-05 5 views
3

우리는 클라이언트 응용 프로그램과 서버 응용 프로그램을 개발했습니다. 클라이언트는 http 프로토콜을 사용하여 서버와 통신하고 서버에서 처리 할 일부 데이터를 보냅니다.서버를 자동으로 검색하는 방법은 무엇입니까?

우리의 구조는 우리가 어디서든 서버를 설치하게합니다. 동일한 클라이언트 네트워크 또는 클라우드에있을 수 있습니다.

서버가 클라우드에서 호스팅되는 경우 서버 주소를 사용자에게 묻는 것이 좋습니다 (사용자가 원할 경우 변경할 수 있기 때문에). 서버가 서버와 동일한 네트워크에있는 경우에는 의미가 없습니다. 고객. 그 외에도 우리는 현재 사용자가 서버에 연결하기 위해 서버 ip/name을 구성하도록 요청하고 있습니다.

사용자가 주소를 묻는 것을 피하기 위해 UDP 기반의 검색 서비스를 개발했습니다. 클라이언트는 서버가 해당 주소로 응답하는 메시지를 브로드 캐스트합니다. 어떤 경우에는 작동하지만 사용자가 방화벽, 프록시 또는 안티 바이러스와 같은 종류의 보안 위협이없는 경우에는 작동하지 않습니다.

나는 발견 서비스에 대해 많이 읽었으며, 가장 비슷한 것은 Bonjour입니다.

그래서 질문은 : 서버가 방화벽, 프록시 등에 의해 차단되지 않고 클라이언트와 동일한 네트워크에있을 때 서버의 IP를 발견하는 가장 좋은 방법은 무엇입니까?

+0

클라이언트가 선택한 포트로 인바운드 UDP 패킷을 허용하도록 방화벽에 요청합니까? –

+0

나는 기울어진다. 내 소프트웨어가 널리 배포되어 있으므로 어떤 환경에서 실행되고 있는지 전혀 제어 할 수 없습니다. –

답변

1

hole punching을 구현하여 서비스를 인트라넷에 로컬로 유지하고 현재 사용중인 서비스 위에 구축 할 수 있습니다. 과거의 방화벽은 사용할 수 있지만 AV 소프트웨어 정책에 대해서는 확실하지 않습니다.

또는 인터넷에서 잘 알려진 http 기반 검색 서비스를 설정할 수 있습니다.

  1. 서버가 살아 온다 검색 서비스에의 (로컬) IP 주소를 전송, 그는에있는 로컬 서브넷을 식별, 시작에
  2. 는 클라이언트가 검색 서비스를 쿼리 (-alives 유지 보내는 계속) 서버의 로컬 IP 주소를 가져옵니다.

물론 디스커버리 서비스가 버킷을 찰 때 클라이언트가 서버를 찾을 수 없다는 점에서 시스템에 단일 실패 지점이 생성됩니다. 서비스 복제 및/또는 대체로 사용자가 원하는 로컬 검색과 같은 대체 메커니즘을 도입하여이를 해결할 수 있습니다. 로컬 서브넷의 컴퓨터가 외부 IP 주소를 공유하지 않는 경우 유일한 문제는 서브넷 ID입니다 (그러면 로컬 서브넷이 사용자의 용도에 따라 다릅니다).

관련 문제