問題タブ [nsnetservice]
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.
objective-c - Bluetooth の代わりに WiFi で NSNetService
2 つの iOS デバイスと、NSNetService を開始または接続するアプリケーションがあります。
両方のデバイスで Bluetooth がオンになっている場合、データ ストリームは Bluetooth インターフェイス経由で自動的に行われます。
私はそれを望んでいません。両方のデバイスがWiFi経由で通信したいのです。NSNetService を強制的に WiFi 経由で通信させる方法はありますか?
ありがとう
cocoa-touch - NSNetService による同期 Bonjour 解決 (実行ループから制御を返すのに時間がかかるのはなぜですか?)
サービス名の Bonjour 解決を同期的に実行しようとしているため、NSNetService の netServiceDidResolveAddress() 呼び出しを適切に待機する方法を見つけようとしています。
私のコードは次のようになります。
そして、解決の成功を処理する私の関数は次のとおりです。
解決イベントが発生してから 1 秒ほどコードが実行され続ける限り、満足です。
実際に起こっていることは、解決が非常に迅速に行われ、netServiceDidResolveAddress() のコードが完了していることがわかりますが、runUntilDate から制御が戻るまで一貫して望ましくない 5 ~ 6 秒の待機があり、"...(実行後ループ) デバッグ ステートメント。
いくつかのメッセージ ボードを調べたところ、同様の質問がありましたが、それらの解決策 (CFRunLoopStop の使用など) は何の効果もないようです。
以下は、私が受け取るロギングの例です。
誰かが NSNetService 解決を使用して同期結果を取得する別の方法を教えてくれたり、ランループ関連のコードをリファクタリングしてこの (OS によって作成されたように見える) 5 ~ 6 秒の遅延を回避したりできる場合は、感謝します。
iphone - NSNetServices を使用して、ある iPhone デバイスから別の iPhone デバイスにテキスト メッセージを送信する
NSNetServices を使用して、ある iPhone デバイスから別の iPhone デバイスまたはシミュレータにテキスト メッセージを送信したいと考えています。誰でもこの問題を理解する方法を知っていますか?
cocoa - 停止メソッドの呼び出し後も NSNetServices は持続しますか?
NSNetServices を使用して単純なボンジュール ブロードキャストを行っています。アプリケーションの起動/終了時に bonjour 共有を開始および停止すると、すべてがうまく機能しています。ただし、stop メソッド呼び出しを使用して bonjour をオフにすると、netServiceDidStop: デリゲート メッセージが呼び出された後でも、アプリは停止したサービスをブロードキャストしているように見えます。これにより、アプリの再起動後までサービスの再起動が妨げられます。Apple のドキュメントでは、必要に応じて公開または停止するだけで、非常に簡単に見えます...何か不足していますか?
objective-c - NSNetServiceBrowser didRemoveServiceは、ストリームを開いてから時間がかかります
ネットワーク上のサービスを検出するための次のコードがあります。
その結果、次の2つのメソッド(サービスの検索とサービスの削除)が呼び出されます。
これは正常に機能します。デバイスの電源を切ると、すぐにdidRemoveService呼び出しを受け取ります。
ただし、デバイスへのストリーム(入力、出力、またはその両方)を開くと、次のようになります。
NSNetServiceBrowserがデバイスの電源を切ったことを検出するのに突然1分近くかかります( didRemoveService
が呼び出される
のに1分かかります)。
通信していない(ストリームを開いている)デバイスは、削除するとすぐにdidRemoveServiceを呼び出します。
更新: これが私の問題に関連するもう少しの情報です。
Wiresharkでトレースを実行したところ、次のことに気づきました。
iPadシミュレーターでアプリケーションを起動すると、アプリケーションがNSNetServiceBrowserを起動し、プリンターを検出します。その後、デバイスへの入力/出力ストリームを開きます(Airport Express、USB経由)。プリンターからステータスの更新が送信され、アプリのテストボタンをタップするとプリンターが印刷を開始します。Wiresharkでは、期待どおりにプリンタとのすべての通信が表示されます。
これで、iPadでまったく同じアプリケーションを起動したとき(そしてiPadシミュレーターを実行したままにしたとき)。アプリケーションはNSNetServiceBrowserも起動し、プリンターを検出します。プリンターからステータスの更新が送信されず、テストボタンをタップしてもプリンターが印刷されません。Wiresharkで通信が表示されます。プリンターまたは空港が私のコマンドを受信し、ACKパッケージを送信します。
iPadシミュレーターアプリを終了するとすぐに、プリンターはiPadを使用して送信したコマンドの印刷を開始します。ソケットを開くとすべてのbonjourイベントがブロックされるようですが、どうすればこれを防ぐことができますか?
ios - iOS デバイスでの Bonjour AirPrint サービスの作成
そこで、iOS デバイスにプリンターとして発行 (サービスを発表) するには、NSNetService を使用して、タイプを に設定することにしました_ipp._tcp
。
ただし、AirPrint プリンターとして認識されるためには、次の要件が必要です。
- AirPrint は印刷管理に IPP を使用します。
- AirPrint は、プリンターの検出のために mDNS (Bonjour/Avahi) をリッスンします。
- AirPrint では、プリンターのリストを検討する前に
_universal
、アナウンスにサブタイプが存在する必要があります。_ipp
- AirPrint は、プリンターのリストを検討する前に、追加の TXT レコード「URF」が存在し、空でないことが必要です。
- この URF 形式 (以下を参照) は Apple の将来のオプションのようですが、現在のすべての AirPrint 対応アプリは印刷データを PDF として送信するようです。
- プリンターがユーザー名/パスワードで保護されている場合、iTunes/AirPrint デーモンは TXT レコード「air=username,password」を送信します。
そのため、サブタイプを公開し、NSNetService の下で TXT レコードを公開する方法を見つけようとしていますが、これはできませんでした。誰にもアイデアはありますか?
iphone - iOS での NSNetServiceBrowser/Bonjour の問題
私が取り組んでいるiOSプロジェクト用に開発しているアプリで、WiFi経由でBonjour(正確にはNSNetServiceBrowser)を使用しています。
ただし、 「NSNetServiceBrowser が iPhone OS で公開されていないサービスを見つけるのはなぜですか?」の優れた応答で提起された問題に注意しているにもかかわらず 私はまだ NSNetSericeBrowser で多くの問題に直面しています。
私のセットアップは次のとおりです。
- iOS 4.5.3 を実行している iPad での作業。
- AirMac Express をアクセス ポイント/ルーターとして使用する。
- ネットワークに接続された Mac で dns-sd -B _serviceName を実行すると、正常に動作します。つまり、すべての公開と停止の呼び出しがデスクトップにすぐに反映されます。
ただし、次の問題が発生しました。
- 長時間 (約 15 分以上) 公開されているサービスは、Mac から消えても、クライアントから削除されない傾向があります。(つまり、didRemoveService は呼び出されません)。
- 公開されているサービスが、Mac に表示されていても、ネットワーク上の他のユーザーには表示されないことがあります。(つまり didFindService が呼び出されない) -- これはおそらく以下の 3/4 のポイントに関連しています... iPad がネットワークに接続される前にアプリが実行 (および検索) を開始すると、新しいネットワークは検索されません。ちゃんと。
- サービスの公開後にデバイスがネットワークを変更するとどうなりますか? Bonjour は新しいネットワーク上でサービスを再公開しないことがわかりました。どうすればこれを強制的に実行できますか?
- サービスの検索中にデバイスがネットワークを変更するとどうなりますか? これも問題を引き起こし、セッションが見つからない (didFindService が呼び出されない) 傾向があることがわかりました。
Bonjour は 90% の確率で動作するため、私が抱えていた問題は奇妙です... 私のアプリの信頼性を台無しにしているのは、その 10% だけです! 厄介なのは、上記の問題はすべて、ホーム ボタンを 2 回押してアプリを強制終了し、再実行することで解決できることです。再度実行すると、常に正しいセッションが検出されるか、適切に公開されます。
この問題を回避する 1 つの方法は、ワイヤレス ネットワークが変更されるたびに NSNetServiceBrowser を破棄して再起動することですが、これは非常に面倒で不必要に思えます。苛立たしいのは、Bonjour が高レベルの API であり、微調整やテストを行うための実際のオプションがないことです。
問題1〜4を整理する方法はありますか?
ありがとう!
ios - Apple Bonjour:公開されているどのサービスが自分のものかをどうやって見分けることができますか?
2つのiOSデバイスがBonjourAPIを使用してお互いを正常に検出していますが、両方が同時に公開と閲覧を行っているため、利用可能なサービスのリストにも表示されます。各エンドポイントがサービスが独自のものであると判断し、リストから除外するために使用できる情報が少しあるはずです...私はどこかでそれを見逃したと確信しています-何かアイデアはありますか?
いくつかの小さな変更を加えて、ドキュメントの例を使用しました。
bluetooth - Bluetooth、Bonjour ネットワークを使用した Wi-Fi
(Bonjour ベースのネットワーク) Iphone アプリケーションで NSNetService を公開している場合、アプリケーションで使用するネットワーク
objective-c - UnArchived NSMutableDictionary o NSDataでエラーが発生しますか?
あるiphoneから別のiphoneにwifi/blutoothを介して情報の辞書を送信しようとしています。そのために、CFnetworkとNSNetserviceConceptを実装しています。受信側でデータを受信しました。
私は次のようにコードを作成しました...。
レシーバー側
受信側でデータを取得しました。つまり、バイト形式です。このデータをレシーバー側でアーカイブ解除できません。これをこのような辞書形式にアーカイブ解除しようとしている場合
しかし、残念ながら、このデータを辞書形式でアーカイブ解除することはできません。行のエラーが発生しています NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
このようなバイトデータを文字列形式に変換するためのコードを見つけました
しかし、私の問題は、同じ辞書をどのように取り戻すかです。アーカイブされていない時間にエラーが発生するのはなぜですか?