クライアントからメッセージを受信し、それらに応答を送信するUDPserverがあります。しかし、UDPclients がオンラインかどうかを確認する必要があります。isReachable を使用すると、PC がオンラインかどうかをテストできます。しかし、異なるクライアントが同じ PC を使用しているが異なるポートを使用している場合、ポートが開いているかどうかを確認する方法 (ポート 5678 の Client1 はオンラインですが、client2 6777 はオフです。
4 に答える
ここでは、2 つの異なる概念を混同しています。「isReachable」関数は、問題の IP アドレスが IP プロトコル パケットに応答しているかどうか (応答しているかどうか) を確認するだけの IP レイヤー プロパティです。
UDP は、IP を介した未確認のデータ ブロードキャスト用に設計されたブロードキャスト データグラム プロトコルであるため、「到達可能性」の概念が組み込まれていません。UDP クライアントは何らかの方法で受信検出メッセージを監視し、それに応じて応答する必要があります。
IsReachable は、指定されたホストで ICMP エコー リクエスト (ping) のみを実行するため、クライアントが実行されていなくても、ホストが ICM リクエストに応答している限り、到達可能として表示されます。
リモートクライアントが実行されているかどうかを確認するには、単純な「ping」プロトコルを実装する必要があります。つまり、サーバーは特別なメッセージをクライアントに送信し、クライアントはそれに応答する必要があります。
クライアントが生きているかどうかを知ることが唯一の問題である場合は、クライアントからのキープアライブ メッセージが最も簡単です。たとえば、パッケージの内容 (または送信者ポート) からクライアントを識別できます。
クライアントにメッセージを送信したい場合は、両端にUDPサーバーが必要であり、「クライアントサーバー」がリッスンしているポートを交換し、それを通信に使用する必要があると思います.
もちろん、後者の場合、ほとんどの場合、すべての受信トラフィックがブロックされるため、ファイアウォールで問題が発生します。
UDP は、コネクションレスで信頼性の低いパケット指向のプロトコルです。リモート マシンの特定のポートにバインドされたソケットがない場合、パケットは単純に破棄されます。
クライアントがオンラインかどうかの検出をサポートする何らかのプロトコルを実装する必要があります。おそらく、キープアライブ タイプのメッセージを定期的に送信します。