問題タブ [gcdasyncsocket]
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.
ios - GCDAsyncSocket の readStream が無制限の量のデータの読み取りを完了したことを知る方法は?
私は、サーバー (プロトコルを制御できない) に接続し、各行が CRLF で終わるテキスト データのストリームを取得する iPhone アプリを作成しています。未定。GCDAsyncSocket
を再帰的に呼び出して、1readDataToData:withTimeout:tag:
行ずつデータを取得しています。
以前はNSStream
同期的に から読み取っていたので、 を呼び出すことで読み取りがいつ完了したかを知ることができましたhasBytesAvailable
。最近 に切り替えましたがGCDAsyncSocket
、ストリームが利用可能なすべてのデータをいつ読み取ったかを知りたいので、データの保存/処理、テーブルの更新、オーバーレイの削除などを行うことができます.
socket:didReadData:withTag:
次の読み取りが要求される前に、デリゲート メソッドで次のように呼び出して、以前と同様の手法を使用してみました。
しかし、結果は常にYES
.
また、読み取りリクエストが送信された後にメソッドを呼び出してみましprogressOfReadReturningTag:bytesDone:total:
たが、読み取りが完了すると常に 1 を返し、それ以外の場合は nil を返すようですが、その方法でメソッドを使用することが信頼できるかどうかはわかりません。
progressOfReadReturningTag:...
この場合、誰かが実際に信頼できるかどうかを教えてくれるかもしれません。そうでない場合は、これを解決するために別の方向に向けてください。
ios - Cocoaasyncsocket の複数の書き込み操作
アプリに gcdasynsocket を実装し、複数の書き込み操作を実行しました。デリゲート didWriteDataWithTag は 2 回呼び出されますが、didreaddata は 1 回だけ (つまり、1 回の書き込み操作に対して) 呼び出されます。
GCDasyncsocket デリゲート メソッド
何が問題なのかわかりません。問題を解決するのを手伝ってください
ios - iOS 6 および gcdasyncsocket を使用した継続的な受信 udp パッケージ
gcdasyncsocket で udp パッケージを継続的に受信することに問題があります。これは、iP5 iOS6 および iP4 iOS6 が 200 ~ 300 ミリ秒の間パッケージを受信し、さらに 200 ~ 300 ミリ秒停止して、再び受信を開始するようなものです。iPhone 5 iOS7、iPhone 4 iOS 6、iPhone 5 iOS6 でいくつかのテストを実行しました。その結果、iOS 6 でのみ問題が発生することが確認されました。
コードは洗練されたものではなく、可能な限り単純で、ブロードキャスト アドレス「230.0.0.1」に送信し、レシーバ ソケットはグループ「230.0.0.1」に参加します。
送信者
レシーバー
継続して受け取るにはどうすればよいですか?同様の問題に遭遇しましたか?
アップデート
iP5 iOS7 -> 6.1 シミュレーターと iOS 6.1 シミュレーター -> iP5 iOS7 でいくつかのテストを実行します。どちらの場合も、継続的に受信しています。
更新 v2
もう一度テストを実行しましたが、今はシミュレーター 6.0 で継続的に受信しています。
ios - iPhoneアプリでGCDAsyncSocketライブラリを使用して接続した直後にソケットが切断される
車のデータと障害コードを読み取るために使用される OBD2 Wifi 対応アダプターからデータを読み書きしたいと考えています。そのために、ソケット接続にGGCDAsyncSocketライブラリを使用しています。
CocoaAsyncSocket ライブラリのソースコードをダウンロードできます
しかし、接続を維持するのは 10 秒ほどで、場合によっては 40 ~ 50 秒続き、その後終了します。
ログには次のように表示されます。
ソケットが切断されました: エラー Domain=NSPOSIXErrorDomain Code=57 「操作を完了できませんでした。ソケットが接続されていません」 UserInfo=0x14cd50 {}
任意の助けやアイデアをいただければ幸いです!
前もって感謝します !
以下のコードを見てください:
ios - GCDAsynSocket API を使用した非同期値更新
OBD コネクタを使用して、エンジン RPM、速度などの複数の値を一度に更新する必要がある 1 つのアプリケーションを開発しています。非同期のコマンド/レスポンスを実現する必要があります。このために[gcdAsyncSocket writeData:data withTimeout:-1 tag:uniqueTag];
、一意のタグを使用して非同期でコマンドを送信しています。
しかし、gcdAsync のデリゲート メソッド「socketDidReadDatawithTag」が呼び出されると、データは返されますが、適切ではありません。それぞれ 263 と 264 であり、 socketDidReadDatawithTag でタグ 264 を使用して応答を解析すると、時々 RPM のデータが返されます。(応答が混乱するか、OBD デバイスが非同期応答を処理できない)
また、socketdidReadDatawithTag
データとタグが一致していません。
ios - ブロードキャストモードでしばらくすると、GCDAsyncUdpSocket がパケットを送受信できないのはなぜですか?
GCDAsyncUdpSocket
アプリでUDPソケットを作成するために使用しています。シナリオは次のようなものです。ユーザーがボタンをクリックすると、LAN にブロードキャスト パケットが送信され、応答がリッスンされます。LAN には 1 つの UDP パケットで応答するサーバーがあります。アプリが応答を受け取ると、何かを実行します。
私GCDAsyncUdpSocket
は次のように設定しました:
次に、次のようにボタン アクションでパケットを送信します。
の
メソッド私は何かをするためにポートをリッスンします。最初は問題なく動作しますが、後でボタンをクリックしようとすると (約 1 時間)、UDP パケットを送信できなくなります。
LAN 内のサーバーは、受信したデータを印刷します。send メソッドに問題があると思いました。だから私はBSDソケットメソッドを使ってデータを送信します。GCDAsyncUdpSocket
応答を受け取るために使用します。しかし、しばらくして同じことが起こりました。今回は送信はできますが、受信できません。
私は何かが欠けていGCDAsyncUdpSocket
ますか?しばらくすると送受信できないのはなぜですか?どんな助けでも大歓迎です。