問題タブ [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 は転送中にデータを変更します
マルチプレイヤー iOS ゲームを作成していて、次の問題に遭遇しました: カスタム オブジェクトの配列を含む辞書を送信します。これらのカスタム オブジェクトは に準拠していNSCoding
ます。辞書をNSData
次のように変換します。
そしたら送って
受け取る
そして解凍してみる
すべてが非常に単純に見えますが、データの解凍中にアプリがクラッシュし、次のエラーが表示されます
[NSKeyedUnarchiver initForReadingWithData:]: 理解できないアーカイブ (0x62、0x70、0x6c、0x69、0x73、0x74、0x30、0x30)'
送受信されたデータの説明を調べたところ、データが 1) 変更され、2) 切り捨てられて受信側デバイスに送信されることがわかりました。
GameKit プロトコル、Game Center、および bluetooth を介してまったく同じデータを送信すると、このような問題はありません。データを変更せずに受信するため、明らかに問題は GCDAsyncSocket の奥深くにあります。
誰もそのようなトラブルに遭遇したことがありますか?ありがとう
objective-c - GCDASyncSocket 使用時にデータ パケットを分離する方法
誰でも私を助けることができますか?GCDAsyncSocket を使用して、TCP プロトコルを介して 2 つのデバイス間で集中的にデータを交換します。次のようなデータを送信します。
私は次のようなデータを読みました:
これらのデータのパケットがめちゃくちゃになるという私の問題。タグ 10 でマークされたパケットが受信側デバイスでタグ 11 でマークされたパケットとして読み取られ、パケット 10 の直後に送信されたとします。実際のパケット 11 のアーカイブ解除に関しては、NSKeyedUnarchiver
例外がスローされますIncomprehensible archive
。
私が理解している限り、どうにかしてパケットを分離する必要があります。私が試したのは、送信されるデータに区切り記号を追加することでした:
そして、次のように読み込もうとしています:
しかし、それは役に立ちませんでした。私は何を間違っていますか?代わりに何をすべきですか?
ios - iOS 5.1 で GCDAsyncSocket を使用してデータを書き込もうとするとエラーが発生する
iOS アプリで GCDAsyncSocket を使用しようとしています。CocoaAsyncSocket の wiki で提供されているすべての手順に従っています。これが私がやっていることです:
私はすでにフレームワークの依存関係も含めました: Security & CFNetwork, そして私のクラスにそれぞれのデリゲートを含めました. それを使用するために他の構成が必要ですか?
この例を実行すると、次のエラーが発生します。
[ NSMallocBlockバイト]: 認識されないセレクターがインスタンス 0x6b7abe0 に送信されました 'NSInvalidArgumentException'、理由: '-[ NSMallocBlockバイト]: 認識されないセレクターがインスタンス 0x6b7abe0 に送信されました'
そして、それは GCDAsyncSocket.m のこの行で発生します
objective-c - GCDAsyncsocketでtcp_nodelayを設定するにはどうすればよいですか?
タイトルはわかりやすいようです。アプリでのデータの送受信速度を上げたいのですが、tcp_nodelayをtrueに設定するように言われました。しかし、GCDAsyncSocketでそれを行う方法がわかりません。誰か助けてもらえますか?
ios - iOS用GCDAsyncSocketがバッファを書き出していない
基本的に、NSDataオブジェクトを記述します。
実行すると、デリゲートを呼び出します
しかし、何らかの理由で、書き込みがバッファに送られると...サーバーに書き出されません。
ビルドを停止すると、ソケットがすべてを書き込むことを決定し、サーバーがそれを認識してしまうと思います。
これをどのように修正しますか?CocoaAsyncSocketは必要ないので、フラッシュする方法はありません... "/ n"などの行末を追加しようとしましたが、それでも何も起こりません。
ios - 時間通りに GCDAsyncSocket からの応答を読み取る (iOS)
この問題は非常に単純です。私はそれを処理する方法を理解するのに苦労しています。
私は次のようにデータを読みます:
ここで、予想どおり、デリゲート メソッドが呼び出され、JSON データを適切に読み取ります。
問題は、GCDAsyncSocket が非同期であるため、このコード ブロックです。
後
データが読み込まれる前に呼び出されます。データが読み込まれたことを確認してから分析するにはどうすればよいでしょうか。
ios - 複雑なソケット応答の読み取り
コード設計の質問があります。これを処理するための最も効率的な方法を考えるのに苦労しています。
基本的に、JSONリクエストを送信し、サーバーからのレスポンスを一度に読み返したいと思います。
私は次のような方法を持っています:
何を説明します
基本的に、JSON文字列をサーバーに送信し、失敗したかどうかの応答を取得します。
これをサーバーに書き込んで読み取る方法を知っています。問題はこれを一緒に行うことであるため、そのBOOL値をtrueまたはfalseとして返して、機能するかどうかを確認できます。
ソケットに書き込んだ後、応答を受け取り、デリゲートメソッドを介してそれを読み取る必要があります。
これは、サーバーが応答するとすぐに呼び出されます。問題は、ソケットへのこの読み取り/書き込みがすべて非同期で行われることです。
それが起こるので、私はこれを行う方法を持つことができません:
}
後に呼び出されるコード以来
データが読み取られる前に実行されます(すべて非同期であるため)。
私はそのデリゲートメソッドで何かをしなければならないことに気づきました。これは問題ありませんが、さまざまな種類の応答があり、それぞれの応答を異なる方法で処理する必要があります。
私の考えは、各書き込みコマンドにタグを付けてから、いくつかを使用することです。
didReadDataデリゲートメソッドで。
しかし、どうすればこのデータを正しく返すことができますか?BOOLを返す必要がある場合もあれば、NSDictionary、NSStringなどを返す必要がある場合もあります...
上記の各リクエストメソッドで関連データを返すことができるようにしたいと思いますが、できません(少なくとも効率的ではありません)。リクエストごとに2つの異なるメソッドを作成する必要がありますか?
すなわち
私はこれをどのように扱うかについて少し混乱しています。
はっきりしない場合はお詫び申し上げます。
私は私が得ることができるどんな助けにも感謝します。
objective-c - didConnectToHost が呼び出されていない
GCDAsyncSocket
を使用してインポート し、 「NetClass」という名前のクラスを持つクライアントを作成しましたCGDAsyncSocket.h
。私の場合よりもLoginViewController
、サーバーに接続するためにネットクラス関数を呼び出しました。
サーバー側ではクライアントが接続されていることがわかりますが、クライアント側でdidConnectToHost
は呼び出されません。
私のNetClass
電話LoginViewController
:
そして私のNetClass
機能:
しかし同時に、関数 socketDidDisconnect が呼び出されています
NSLog 出力:
次のように ReceiveData を変更すると、asyncSocket が接続されていないことがわかります。
そして、LoginViewController でソケットを作成すると、didConnectToHost メソッドが完全に呼び出されます/何が問題なのか、NetClass でこのメソッドを使用できないのはなぜですか?
xcode - AppDelegate で宣言されている GCDAsyncSocket をビュー コントローラーで使用できるようにするにはどうすればよいですか
同様の質問の投稿 (これは機能しません) に続いて、AppDelegate.h で GCDAsyncSocket のインスタンスを宣言しました。
AppDelegate.m でソケットの初期化を行います。
次を呼び出して、複数のView Controllerからソケットにアクセスしようとしました:
コード補完は、asyncSocket を提案できずに [[UIApplication sharedApplication] delegate] で停止します。asyncSocket のインスタンスが AppDelegate で宣言されている場合、複数のビュー コントローラーで asyncSocket にアクセスできるようにするにはどうすればよいですか? ありがとう!
これが私のXcodeプロジェクトファイルです: http://bit.ly/PLe1Le
objective-c - データを解析して配列または辞書にする方法
同時に異なるサーバーに複数の接続を行うアプリがあります。各接続を配列に記録して、テーブルビューに表示し、アプリの別のセクションで使用できるようにします。これは、GCDAsyncSocket から返されるものです。
これをアドレスに基づいて変更可能な配列または辞書に解析して、テーブルビューに表示できるようにする方法を見つけようとしています。これは GCDAsyncSocket から来ています