問題タブ [cfnetwork]
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.
iphone - Apples Reachability クラスのより洗練された代替手段はありますか?
Apple は有名な Reachability クラスを作成しましたが、コードを見るとあまり信用できません。フォーマットとヘッダーが乱雑です。
また、「あなたはインターネットを持っていません!」ということを示すのにも役立ちません。アラート。
私はただやりたい:
ある時点で XML をダウンロードします。
インターネットがない場合、アラートを表示します。
XML のダウンロード中にインターネットが切断された場合、アラートを表示します。
私のアプリでは、ユーザーはダウンロード ボタンをタップしません。すべてバックグラウンドで自動的に行われます。
それでおしまい。本当。私は今、Reachability で 3 時間を費やしましたが、私の脳はそれを拒否しました。
クリーンなヘッダーとクリーンなコードを備えた巧妙な代替案を誰かが作成しましたか? 本当に使いやすいものはありますか?
iphone - Apples Reachabilityクラスを正しく使用して、インターネットが機能するかどうかを判断するにはどうすればよいですか?
次に例を示します。
問題:WiFiが「VPNオンデマンドの接続を必要とする場合がある」と聞きました。では、インターネット接続が機能していないことをユーザーに正しく通知するにはどうすればよいですか?上記のコードはこれを処理するのに十分ではないと思います。
iphone - ネットワークの到達可能性をテストするためにアプリに Reachability クラスを含める必要があるのはいつですか?
Cocoa with Loveによると、アプリが (セルラー ネットワークではなく) WiFi を必要とする場合、たとえば、アプリが重いビデオをロードし、3G 経由で使用することを意図していない場合、到達可能性が必要です。
私のアプリは WiFi でも 3G でもインターネットを使用し、Web サービスから小さなデータのみをダウンロードします。
アプリがこの到達可能性テストを実行する必要がある状況を誰かが明確にすることはできますか?
iphone - 接続ステータスと処理ドロップの監視
実用的なソリューションを実装しました。以下のコメントをご覧ください。
こんにちは、そしてこの投稿を読むために時間を割いていただきありがとうございます!
独自のAdHocWiFiネットワークをブロードキャストするハードウェアデバイスに接続するアプリを開発しています。NSStreamを使用したCFNetworkフリーダイヤルブリッジを介して、デバイスに接続し、バイトを送信し、バイトを受信することができます。私はかなり「事実上の」ストリーム開始コードを使用しており、ストリームデリゲートはNSStreamEventsを適切に報告しています。
デバイスへの接続を初期化すると、入力ストリームと出力ストリームの両方が開いていることがわかり(NSStreamEventOpenCompleted)、ハードウェアデバイスが常に「HELLO!」を送信しているため、inputStreamにすぐにBytesAvailable(NSStreamEventHasBytesAvailable)があります。
NSStreamEventHasBytesAvailableの場合、inputStreamからデータを読み取り、次のようにログに記録します。
予想どおり、デバイスが接続されている間、「LOG --devicesayed:xxxx」の一定のストリームがあります。ただし、デバイスを電源から切断すると、どのような種類のストリームイベントも受信しません。ロギングは単にすべて一緒に停止します。
私はviewDidLoadでbackgroundTimerを開始することでこの問題を解決しようとしました。これは、0.1秒ごとにinputStreamからの読み取りを試みます。読み取ることができない場合は、ブール値deviceIsConnected
がに設定されFALSE
、デバイスへの接続が切断されたことをユーザーに通知するアラートを表示します。
この方法は、信頼性がかなり低く、ソケット接続の終了を検出するという一見単純なタスクを実行するための非常に不潔な方法であることが証明されています。私が正しく理解していれば、NSStreamクラスは本質的に、基盤となるBSDソケットアーキテクチャの上の「ミドルマン」または抽象化レイヤーです。
ハードウェアデバイスを電源から切断することは、デバイスのオンボードWiFiチップの範囲外を歩くことをシミュレートしています。これは「現実世界」のテストではありません。デバイスから物理的に離れているかのように、突然接続が失われることはありません。むしろ、inputStreamによって受信されたデータはゆっくりと劣化するため、デバイスが「接続済み」と「未接続」の間をジャンプすると、「ネットワークアラート」ポップアップが継続的に点滅します。
ある種のキープアライブハンドラーを実装したいのですが、iPhone / iOS/BSDソケットの経験が不足しているために深刻な障害になっています。素晴らしい個人の誰かが、ソケットが使用できなくなったことを検出して接続の再確立を試みることができる方法の基本的な例を提供できれば(タイマーで実行されている可能性があります、私はそこに正しい道を進んでいると思います!)、私は永遠に感謝するでしょう。私はグーグルを精力的に検索し、いくつかの有望なアイデアを見つけましたが、それらのどれもうまく実装することができませんでした。
CocoaASyncSocketは、私のすべての質問/フラストレーションに対する答えになるでしょうか?
この投稿をお読みいただき、ありがとうございました。私の問題と希望する解決策について明確に説明できたと思います。ご不明な点がございましたら、お気軽にお問い合わせください。できる限りお答えいたします。
ios - CFStream/NSStream で切断された接続を検出するにはどうすればよいですか?
セットアップは次のとおりです。
で作成された入力ストリームがありCFReadStreamCreateForStreamedHTTPRequest
ます。プロパティセットがありkCFStreamPropertyHTTPAttemptPersistentConnection
ます(接続をプールしています)。接続しているサーバーは、チャンク エンコーディングでデータを返しています。
通常のケースでは、すべてがうまく機能します。私の問題は、問題がある場合、話しているサーバーが接続を切断することです。私の人生では、切断された接続を検出する方法がわかりません。
私のストリームのイベント コールバックではkCFStreamEventEndEncountered
、エラーは報告されていませんが、Wireshark では、ストリームの終わりのチャンク エンコーディング マーカーが送信されるずっと前に、接続が FIN になっていることがはっきりとわかります。
kCFURLErrorNetworkConnectionLost
サーバーが接続を切断したときにエラーイベントが発生するはずですが、最後に遭遇しただけです。
どんな提案でも大歓迎です。
ios - iOS でのすべてのソケット呼び出しのログ記録
アプリの問題を追跡しようとしていますが、BSD ソケット API のすべての呼び出しを追跡する必要があります。基本的に、ソケットが作成されるたびに関数が呼び出されるようにしたいと考えています。これにより、その時点でのキー変数の値を含むログ ステートメントが出力されます (ソケットやポートの宛先などを含む)。
プログラムがソケットを直接呼び出したときにこのロギングを呼び出したいのですが (簡単です)、難しいのは、他の上位レベルの API 呼び出し (CFNetwork など) の結果としてソケット呼び出しが間接的に呼び出されたときに呼び出したいということです。 .)
これはどのように行うことができますか?
objective-c - NSURLDownloadオブジェクトにプロキシの詳細を設定する方法
特定のプロキシサーバーを介して実行するダウンローダーを作成しています。プロキシ情報をCFURLRefオブジェクトに渡すことができます。ただし、作成されたプロキシ設定を完全に無視するNSURLDownloadで同じものを使用することはできません。
CFURLRefをNSURLオブジェクトに変換し、それをダウンローダーに渡すと、期待どおりに機能しません。CFURLRefオブジェクトに設定されたプロパティをNSURLRequestに渡すにはどうすればよいですか?..これを実現する他の方法はありますか?.. ASIHTTPRequestラッパーを使用してみました..しかし、これをNSURLRequestに変換するにはどうすればよいですか?..助けていただければ幸いです。 。
ありがとう
ios - CFStream を介した HTTP 要求
CFStream を使用して単純な HTTP 通信を機能させようとしていますが、以下のコードを使用すると、無効な URL (www.yahoo.com) を指定しても接続が成功します。
誰かがこのコードのどこが悪いのか教えてもらえますか? CFReadStreamOpen() の呼び出しが失敗することを期待していますが、URL が正しくなくても成功しています。
ARCで動作するHTTP(NSURLを使用しない)を行う単純なCFNetworkの例を見つけることができませんでした。そのようなサンプルコードを知っている人がいたら教えてください。
iphone - CFReadStreamRead を iOS でタイムアウトするように設定するにはどうすればよいですか?
iOSでCFReadStreamReadを使用するレガシーコードがありますが、接続がない/失われた場合、CFReadStreamReadは永久にブロックされます。CFReadStreamRead をタイムアウトに設定するにはどうすればよいですか?
前もって感謝します