2

私は、macOSまたはWindowsを実行しているコンピューターに接続し、それらのコンピューター上のいくつかのものを制御できるiOS用のアプリを構築しようとしています。これらのコンピューターに別のアプリケーションがインストールされ、iOS上のアプリがそれらのコンピューターに接続できるようになります。ただし、最初に、アプリがインストールされて実行されているネットワーク内のコンピューターを検出する必要があります。それを行う良い方法は何ですか?放送、マルチキャスト、ボンジュールの利用を考えました。他に選択肢はありますか?私の状況に最適なのはどれですか?

私はmacOSとwindows用に2つの異なるアプリケーションを実行することを計画しています。1つはObjectivecを使用し、もう1つはc#を使用するため、両方でネットワーク関連のものを利用できるはずです。前もって感謝します

4

1 に答える 1

1

最も簡単なオプションは、IP/UDPブロードキャストパケットを使用することです。コンピューター上のアプリケーション(任意のOSを実行している)はすべて、事前定義されたUDPポート(たとえば9999)をリッスンしてそこに座ることができ、iOSデバイスがネットワークを「スキャン」する場合、IP/UDPブロードキャストパケットを送信します。宛先ポートは9999です。ブロードキャストパケットを受信すると、コンピューター上のアプリケーションはiOSデバイスのIPアドレスを認識しているため、応答でき、そこからデータを取得できます。

ネットワークを離れるコンピューターを処理する最もクリーンな方法は、コンピューター上で実行されているアプリケーションがこの事実をiOSデバイスに伝達することです。これは、iOSデバイスのIPアドレスを既に知っているためです。ただし、コンピュータの現在のリストを維持することが重要な場合は、バイバイメッセージを送信する機会がなくても、何らかの理由でコンピュータがクラッシュする可能性があるため、何らかのポーリングメカニズムが避けられません。

マルチキャストは次のように利用できます。コンピューターは事前定義されたマルチキャストグループ(224.1.1.1など)のIGMP参加を定期的に送信し、iOSデバイスはネットワークを「スキャン」するときに224.1.1.1宛てのマルチキャストUDPパケットを送信します。マルチキャストUDPパケットは、224.1.1.1のマルチキャストグループにすでに参加しているため、コンピューターによって受信されます。その後、IPアドレスがわかったので、コンピューターはiOSデバイスとの通信を開始できます。ただし、これは非常に複雑に見え、実際には何の利点もありません。マルチキャストを使用することの全体的なポイントは帯域幅を節約することですが、節約される帯域幅の量はごくわずかです。iOSデバイスからすべてのコンピューターに大量の同じデータを送信する場合を除いて、このパスをたどる理由はありません。

Bonjourについては、経験がないので残念ながらコメントできませんが、プラットフォームに依存しないようにするために、単純なブロードキャストに投票します...少なくともコンピューター側では。:)

于 2013-02-01T00:20:27.930 に答える