問題タブ [nsd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Wi-Fi P2P 経由で Network Service Discovery を使用しているときに Android デバイスに接続できない
みんな!このアプリがインストールされている近くのデバイスとチャットできる Android アプリを開発しています。これを実現するために、私は Wi-Fi P2P API と Network Service Discovery を使用して、そのような近くのデバイスを検索しています。サービスによって開始されたスレッドで近くのデバイスを検索するためのコードを作成しました。デバイスが検出されると、サービスはそれを (ブロードキャスト インテントを介して) これまでに検出されたデバイスを表示するアクティビティに送信します。検出されたデバイスは recyclerView に追加され、ユーザーがそのうちの 1 つを押したときに、そのデバイスへの接続を確立する必要があります。Wi-Fi Direct 接続が正常に確立され (つまり、WifiP2pManager.connect() メソッドが成功し)、WIFI_P2P_CONNECTION_CHANGED_ACTION がキャッチされます。放送受信機では、このような放送意図を捉えると、
requestConnectionInfo() メソッドを使用すると、接続しようとしているデバイスの IP アドレスなど、接続に関する詳細情報を取得できます。そのような情報を取得するために、connectionInfoListener 変数で示される WifiP2pManager.ConnectionInfoListener の実装をそのメソッドに提供します。これは、WifiP2pManager.ConnectionInfoListener の私の実装のコードです。
「デバイス」は、現在重要ではない BroadcastReceiver の実装のインスタンス変数です。代わりに、重要なのは ConnectThread スレッドです。これは、2 つのデバイス間のソケットを接続するために必要なコードを処理するスレッドです。検出されたデバイスに接続しようとすると、ConnectThread の run() メソッドで、ChatConnection の新しいインスタンスが作成され、以前に取得した IP アドレスとポート番号がこのコンストラクターに渡されます。
そして、ここで問題が発生します。物理デバイスでアプリをテストすると、次の例外が表示されます。
もちろん、2 台目の物理デバイスにもアプリをインストールしましたが、これは正常に検出され、Wi-Fi Direct 接続が正常に確立されました。しかし、このコード行になると:
その例外がスローされます...この質問が長くなって申し訳ありませんが、可能な限り明確にしたかったのです。助けてくれて本当にありがとう。
編集: ServerSocket を初期化するためのコードについて言及するのを忘れていました。
ServerSocket は、Wi-Fi が有効になるとすぐに開始されるスレッドで初期化されます。
つまり、WifiP2pBroadcastReceiver (BroadcastReceiver を拡張するアプリの Service の内部クラス) が WIFI_P2P_STATE_CHANGED_ACTION インテントをキャッチすると、Wi-Fi が有効になっているかどうかを確認し、有効になっている場合は、ServerSocket が配置されているスレッドを開始します。
ServerSocket は NsdProviderThread の run() メソッドで初期化されます。
「server」は、ServerSocket として宣言された NsdProviderThread のインスタンス変数です。
java - IPv6 を使用した Android ネットワーク サービス ディスカバリ
私は新しいアンドロイドアプリを開発しました。このアプリは、HotSpot ネットワークとサービスを作成します。しかし問題がある。ネットワーク検出サービスのクライアント側で、Android アプリの IPv6 アドレスを解決して、クライアントが tcp ソケット経由でサービスに接続できないようにします。
私の質問は
- IPv4 アドレスをネットワーク サービス検出クライアントに送信する方法はありますか?
- または、クライアント側で IPv6 アドレスとのソケット接続を作成する方法はありますか?
注:私のAndroidデバイスのバージョンはAndroid 5.0.1以上です
android - NsdManager を介して検出されたプリンターを PrintService に追加するにはどうすればよいですか?
PrintService を実装しようとしています。Network Service Discovery (NSD) を使用してプリンターを見つけています ( https://developer.android.com/training/connect-devices-wireless/nsd.htmlなどを参照)NsdManager.DiscoveryListener
と の両方NsdManager.ResolveListener
が非同期呼び出しを行います。ただし、システムはonStartPrinterDiscovery()
NSD 関数が呼び出される前に my を呼び出します。を呼び出す他の機会はありませんaddPrinters()
。
これはどのように機能しますか?
android - Android NSDService の検出 onServiceResolved で間違ったポート番号が取得される
登録されたサービスのポート番号を取得する際に問題があります。実際、私のアプリケーションはポート xxxx (例: 40206) でサービスを登録し、登録は正常に行われました。他のデバイスで、登録されているすべてのサービスを検出するために検出を登録すると、有効なホスト名でサービスが正常に検出されましたが、ポート番号が正しくなく、常にポート 41 が返されます。
なぜそれが起こるのか、それを解決する方法はありますか?
android - Android NSD: null サービス タイプでの登録
登録の結果は空であってはなりません。これは、logcat と登録成功のコールバックから取得したものです。
システムによって生成されたポート 46518、タイプ、txtrecord はすべて空です。
次のコードは公式ガイドからのものです