問題タブ [nsnetservicebrowser]
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 - 検索時に NSNetServiceBrowser デリゲートが呼び出されない
私は本当に厄介な問題を抱えています。NSNetService を検索しようとしています (存在することがわかっています)。サンプル コードをhttp://www.macresearch.org/cocoa-scientists-part-xxviii-bonjour-and-how-do-you-doから自分のアプリケーションにコピーしました。(サンプル プログラムで) サービスが作成されていることがわかります。しかし、検索を押して NSNetServiceBrowser 検索を開始しても、何も起こりません。デリゲート関数 newer が呼び出されます
オブジェクトがまだ保持されているようなものをチェックしてきましたが、何も解放されていないことがわかりません(GCがオンになっていません)。何をすべきか考えている人はいますか?コードは例とまったく同じですが、周りに他のものがあります(openGLウィンドウを実行しています)。
ios - Bonjour / Cocoa:「moreServicesComing」がNOの場合、NSNetServerBrowserはまだリッスンしていますか?
NSNetServiceBrowserインスタンスがサービスを検出すると、デリゲートで次のメソッドを呼び出します。
私の質問:「moreServicesComing
いいえ」の場合、それはブラウザインスタンスがサービスのリッスンを完全に停止し、次の更新を取得しないことを意味しますか?それとも、「今のところこれですべてです」という意味ですが、検索を続けますか?
(NSNetServiceBrowserインスタンスに状態を示すフラグが付いている場合、これは問題にはなりません。残念ながら、そうではないため、一種の謎です。)
iphone - NSNetService の解決中にエラーが発生しました
iPhoneでWi-Fi経由でプレイするボードゲームを作成しています。
デバイス A がデバイス B をプレイに招待すると (B によって発行された NSNetService を解決しようとする)、デバイス B は受け入れるか拒否することができます。
B が拒否した場合、A に通知され、すべて問題ありません。しかし、後で A が B を再度招待しようとすると、netService:didNotResolve:デリゲート メソッドで次のエラーが発生します。
NSNetServicesErrorCode = -72003 NSNetServicesErrorDomain = 10
エラー -72003 は NSNetServicesActivityInProgress を意味します...1 人のプレイヤーが他のプレイヤーを複数回「招待」できるようにするにはどうすればよいですか?
私は AsynchSocket ライブラリを使用しています、ありがとう!
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イベントがブロックされるようですが、どうすればこれを防ぐことができますか?
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を使用してお互いを正常に検出していますが、両方が同時に公開と閲覧を行っているため、利用可能なサービスのリストにも表示されます。各エンドポイントがサービスが独自のものであると判断し、リストから除外するために使用できる情報が少しあるはずです...私はどこかでそれを見逃したと確信しています-何かアイデアはありますか?
いくつかの小さな変更を加えて、ドキュメントの例を使用しました。
ios - NetServiceBrowserは、削除されると異なるNetServiceを提供します
私はこのようなことをしたいと思っていました:
のnetServiceBrowser:didFindService:moreComing:
そしてでnetServiceBrowser:didRemoveService:moreComing:
ただし、返されたサービスはNetServiceBrowserによって保持されないため、で指定されたサービスdidRemoveService
は配列内のサービスと同じオブジェクトではありません。サービスを比較して、削除したサービスが正しいことを確認するにはどうすればよいですか?
iphone - クライアントがbonjourサービスを検出していません
私はiPhoneアプリの設計を学び始めたばかりで、クライアントサーバー環境をセットアップしようとしています。まず、公開するサービスがクライアントに表示されることを確認したいと思います。私はAppleのドキュメントの助けを借りてサーバーとクライアントのコードを書きました。ただし、サービスが公開されているにもかかわらず(netServiceWillPublish(NSNetService *)senderが呼び出されている)、クライアントがこのサービスを識別していないことがわかりました。クライアント側では、デリゲート関数netServiceBrowserWillSearch:(NSNetServiceBrowser *)browserが呼び出され、クライアントがサービスを検索していると思わせます。ただし、didFindServiceデリゲート関数が呼び出されることはありません。なぜこれが機能しないのか、私は困惑しています。私はさまざまな場所からクライアント側のサンプルコードをフォローしましたが、私のコードはそれらのコードと一致しています。
また、私は次の質問があります
サービス名(トランスポートレベルプロトコルに付属)は任意の文字列にすることができますか?または、http://www.dns-sd.org/ServiceTypes.htmlで指定する必要がありますか。また、サービスディスカバリとは別に、これはどのような目的を解決しますか。
サーバー側でNSNetServiceオブジェクトの詳細を印刷すると(ソケットを設定してサービスを開始した後)、ホスト名が(null)として印刷され、アドレスが表示されません。技術的には、サービスが開かれるときに、これらを値に設定するべきではありませんか?はいの場合、誰かが私のコードのどこが間違っているのか教えてください。
サービスの公開と参照が行われるプロジェクトのクライアントとサーバーのコードブロックを添付しました。私はこの問題で私の仕事に行き詰まっているので、助けは非常にありがたいです。
これは、サービスを参照するクライアント側のコードスニペットです
これは、サービスを公開するサーバー側のコードスニペットです
これは、サービスが公開されていることを通知し、NSSocketオブジェクトの詳細を出力するコードスニペットです。
ありがとう
Vivek
objective-c - NSNetServiceBrowserが存在するサービスを見つけられない
カスタムCocoa(OSX)サーバーとクライアントがあり、サーバーはbonjourサービスを公開しています。クライアントにを使用してサーバーを検索させていますNSNetServiceBrowser
が、結果が得られません。の出力にあるため、サービスが公開されていることを知っていますmdns -B _myservicetype._tcp
。私の検索と公開のコードは、同じドメイン、名前、タイプで検索と公開の両方を行っており、Appleのサンプルコードとほとんど同じです。公開コードは次のとおりです。
そして、これが検索とデリゲートのメソッドです:
そして、ここにデリゲートメソッドがあります:
そのほとんどはGUIコードとNSLogsだけですが、GUIの変更やNSLogsを取得することはありません。誰かが解決策を持っていますか?
ios - NSNetServiceBrowser はサービスを見つけることができません。デリゲート メソッドが呼び出されていないようです
NSNetServiceBrowser を使用して、bonjour サービスを参照しています。サービスは正常に開始されましたが、サービスの閲覧中に問題が発生しました。呼び出しを行うと、デリゲート メソッドsearchForServicesOfType:inDomain
のみが呼び出されます。netServiceBrowserWillSearch
他のデリゲート メソッドは呼び出されず、サービスが見つかりません。NSNetServiceBrowser は存在するサービスを見つけられませんが、彼が実際に何を意味するのか理解できません (回答のパート 2 を参照)。質問の作成者は問題を解決しましたが、詳しく説明しませんでした。netServiceBrowser:didFindService:moreComing:
などの他のデリゲート メソッドが呼び出されない理由を教えてください。