2009-05-22 15 views
2

私は、サーバーとクライアントプロセスからなるプログラムを持っています。どちらもWindowsシステム(Windows 2000以降)で動作します。 2つのプロセスは、同じマシン上または2つの異なるマシン上で実行できます。それは、サーバと同じマシン上で実行されている場合、クライアントが決定するにはどうすればよいWindowsマシンのIDはどのようにして確認できますか?

?サーバーが稼働していない場合、クライアントはとにかく動作することはできませんし、サーバーがおそらくどこにあるかは気にしません - この場合は問題ありません。私は、各WindowsマシンにUUIDがあると聞いています。それを入手してその目的に使用できますか?

+0

両方が同じマシン上で実行されているが、サーバーが実行されていない場合、クライアントは「同じマシン上で実行する」または「サーバーが実行されていないため、私たちは同じマシンで走っていますか? " –

+0

同じホスト上で実行されている仮想マシンはどうですか?あなたはそれらを別のマシン、または同じマシンと見なしますか? –

答えて

2

Windowsネットワークは一意であるためにコンピュータ名が必要なので、(彼らが表示される名前に受け取った名前を比較)GetComputerNameのAPIを呼び出すと、クライアントとサーバーのスワップの名前を持つことは十分です。クライアントとサーバーが互いに独立して起動できる場合、このプロセスにはある種のプロトコルが必要です。それは、クライアントが交換を開始することは論理的であり、クライアントから名前を受け取ったときにのみその名前を送信することになります。それは同じ名前を見れば、クライアントは接続を中止することができます。

私はあなたが仮想マシン上でテストすることはまだ可能でなければなりませんので、ほとんどの仮想マシンシステムは、仮想マシンは、独自の名前を持つことができるようになると信じています。しかし、私はそこにすべての仮想化技術の豊富な経験を持っていないので、確かに言うことはできません。

1

どのようにループバックTCP接続を確立しようとしていますか?または、あらかじめ定義されたフォルダ内のサーバによって作成されたロックファイルをチェックするかもしれません...

私は正確にはわかりませんが、Win32ではUnixの/ procファイルシステムと同等のものがありますWindows taskmanagerの無償交換、おそらくあなたはそのソースを見ることができます)、サーバープロセスを検索することができます。役立つかもしれない

2

Previous question about generating a unique machine idLink to previous answer which mentions MachineGUID

そのマシン名を報告し、サーバーへのAPIを追加することは簡単です。環境変数はCOMPUTERNAMEです。クライアントはそれを確認できますか?

これらのケースのいずれかに対処する必要がありますか?

  1. クライアントが実行されているが、サーバーは応答していない、あなたが応答しないサーバがリモートマシン上にあるかどうかを知りたいです。
  2. クライアントとサーバが同じホストマシン上の2台の別々の仮想マシンで実行されている、とあなたが報告したいこと「は同じマシン上で実行されている。」などクライアントがサーバと同じマシンでホストされている仮想マシンで実行されている
  3. が実行されている、とあなたはとすることを報告したい「と同じマシン上で実行されています。」
  4. クライアントとサーバーは、調整されていないネットワーク上で実行されており、両方に同じ名前が割り当てられている可能性があります。
  5. サーバーがおそらく敵意があり、クライアントを欺こうとします。

ネットワークカードは固有のMACを持つことになります。サーバとクライアントの両方が同じMACを報告する場合、それらは同じネットワークカードを使用しています。クライアントとサーバーの両方が異なる仮想マシンで実行されているが、同じネットワークカードを使用している場合は、同じマシンまたは異なるマシンで実行されていると考えますか?

関連する問題