2009-05-22 12 views
2

나는 서버와 클라이언트 프로세스로 구성된 프로그램을 가지고있다. 둘 다 Windows 시스템 (Windows 2000 이상 버전)에서 실행됩니다. 두 프로세스는 동일한 시스템 또는 두 개의 다른 시스템에서 실행될 수 있습니다.Windows 컴퓨터의 ID는 어떻게 결정합니까?

클라이언트가 서버와 동일한 시스템에서 실행되는지 어떻게 결정할 수 있습니까? 서버가 실행되고 있지 않으면 클라이언트는 어쨌든 작동하지 않을 수 있으며 서버가있는 위치는 중요하지 않으므로이 경우는 의문의 여지가 있습니다. 각 Windows 컴퓨터에 UUID가 있다고 들었는데 그 용도로 사용할 수 있습니까?

+0

둘 다 동일한 시스템에서 실행될 예정이지만 서버가 실행되지 않는 경우 클라이언트가 "우리가 동일한 시스템에서 실행됩니다"또는 "서버가 실행 중이 지 않기 때문에" 우리는 같은 기계에서 뛰는거야? " –

+0

동일한 호스트에서 실행되는 가상 머신은 어떻게됩니까? 다른 기계 또는 동일한 기계라고 생각하십니까? –

답변

2

Windows 네트워킹을 사용하려면 컴퓨터 이름이 고유해야하므로 GetComputerName API를 호출하고 클라이언트와 서버 스왑 이름을 가지고 (수신 된 이름과 표시되는 이름을 비교하면됩니다) 충분해야합니다. 클라이언트와 서버가 서로 독립적으로 시작될 수 있다면이 프로세스를 위해 일종의 프로토콜이 필요합니다. 클라이언트가 교환을 시작하는 것은 논리적 인 것으로 보이고, 서버는 클라이언트로부터 이름을 받았을 때만 이름을 보냅니다. 그런 다음 클라이언트는 동일한 이름을 볼 경우 연결을 중단 할 수 있습니다.

대부분의 가상 시스템 시스템에서는 가상 컴퓨터가 자체 이름을 가질 수 있으므로 가상 컴퓨터에서 테스트 할 수 있어야합니다. 그러나 나는 모든 가상화 기술에 대한 광범위한 경험이 없기 때문에 확실하게 말할 수는 없습니다.

1

루프백 TCP 연결을 설정하는 방법은 무엇입니까? 또는 미리 정의 된 폴더에있는 서버에 의해 생성 된 잠금 파일을 검사 할 수도 있습니다.

정확히 어떻게 해야할지 모르지만, Win32에서는 유닉스의/proc 파일 시스템과 동등한 기능이 있습니다. windows taskmanager에 대한 무료 대체, 어쩌면 당신은 그들의 소스를 볼 수 있습니다) 당신이 서버 프로세스를 검색 할 수 있습니다.

2

Previous question about generating a unique machine id 도움이 될 수 있습니다. Link to previous answer which mentions MachineGUID

컴퓨터 이름을보고하는 서버에 API를 추가하는 것은 간단합니다. 환경 변수는 COMPUTERNAME입니다. 의뢰인이 바로 확인할 수 있습니다.

이러한 경우 중 어떤 것을 처리해야합니까?

  1. 클라이언트가 실행 중이지만 서버가 응답하지 않고 응답하지 않는 서버가 원격 컴퓨터에 있는지 여부를 알고 싶습니다.
  2. 클라이언트와 서버가 동일한 호스트 컴퓨터에있는 두 개의 별개의 가상 컴퓨터에서 실행 중이며이를 "동일한 컴퓨터에서 실행 중"이라고보고하려고합니다.
  3. 클라이언트가 서버가 실행되는 것과 동일한 시스템에서 호스트되는 가상 시스템에서 실행 중이며이를 "동일한 시스템에서 실행 중"으로보고하려고합니다.
  4. 클라이언트와 서버가 비 정렬 네트워크에서 실행 중이며 둘 다 동일한 이름이 할당되었을 수 있습니다.
  5. 서버가 적대적 일 수 있으며 클라이언트를기만하려고 시도합니다.

네트워크 카드에는 고유 한 MAC이 있습니다. 서버와 클라이언트가 동일한 MAC을보고하면 동일한 네트워크 카드를 사용하고 있습니다. 클라이언트와 서버가 서로 다른 가상 머신에서 실행되지만 동일한 네트워크 카드를 사용하는 경우 동일한 머신 또는 다른 머신에서 실행되는 것으로 간주합니까?

관련 문제