問題タブ [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.

0 投票する
1 に答える
141 参照

ios - CocoaAsyncSocket と coredata のスレッドの問題

私のアプリは、バックグラウンド キューでソケット接続を処理します。接続キューから呼び出されるヘルパー クラス内で、検証 (フェッチ要求) を実行するためにコア データにアクセスする必要があります。メイン キューでコア データ フェッチを実行し、値を接続キューに渡すにはどうすればよいですか?

コードは次のとおりです。

  1. を試してみましたperformSelectorOnMainThread:withObject:waitUntilDone:YES。ただし、ソケットの実行をメイン キューに移動し、アプリをフリーズします。
  2. でdispatch_asyncを試しましdispatch_get_main_queue()たが、ソケット接続が実行されているバックグラウンドキューにどのようにアクセスできるかが問題です(dispatch_get_current_queue非推奨です。
0 投票する
1 に答える
115 参照

ios - iOS デバイスとの安全な接続のホスティング

私はファイル共有アプリケーションに取り組んでいます。2 つの iOS デバイス間の TCP 接続で動作しており、それらの間の安全な接続が必要です。接続には GCDAsyncSocket ライブラリを使用しています。以前はSSL接続を受け入れる他のアプリケーションを接続するためにこのライブラリを使用していたので、クライアント側には問題ありません。これが質問です。有効な SSL 証明書を使用した SSL 接続のみを受け入れるソケットをホストするにはどうすればよいですか? ありがとう。

0 投票する
1 に答える
587 参照

ios - GCDAsyncSocket がポートを解放しない

私は次のコードを使用しています:

UDP ブロードキャストをリッスンするソケットを開始します。

しかし、シミュレーターでこのコードを 1 回しか実行できないようです。その後、 bindToPort コマンドから「アドレスは既に使用されています」というエラーが返されます。

これを修正するためにこれまでに見つけた唯一の方法は、マシンを再起動することです。開発者の観点からは、これはまったく実用的ではありません。

私はこれでうまくいきました。何が変わったのでしょうか?

0 投票する
3 に答える
5450 参照

ios - iOS でマルチスレッドを行う方法は?

この質問のあいまいなタイトルで申し訳ありません。私が抱えている問題を説明するための簡潔な文が思いつきませんでした。

基本的に、複数のスレッドを開始し、そのコンテキスト内で使用できるスレッド固有の値を持つオブジェクトを渡したいと考えています。これがそれを行うコードです

thread_bytes各スレッドは、正しいおよびを使用してセレクター メソッドを呼び出し、ソケットにthread_offsetアクセスすることもできGCDAsyncSocketます。その結果、thread_bytesおよびを使用する多数のデリゲート メソッド呼び出しが発生しますthread_offset。これがセレクターメソッドです。

処理中の N 個のスレッドがある場合、リクエスト メッセージを送信すると_thread_offset、たとえばオフセットが 0、2、4、8 の場合、1 つのスレッドが 0、他のすべてのスレッドが 8 と表示されますそのコンテキスト内の一意のオフセット。

また、スレッドが終了したときのコールバック メソッドはありますか?

0 投票する
1 に答える
1728 参照

objective-c - GCDAsyncSocket が送信されたすべてのデータを受信せず、最後の「チャンク」がありません

PythonスクリプトからOSXで実行されている目的のCアプリケーションに文字列と画像データを送信しようとしています。

GCDAsyncSocket を使用して送信されたデータを収集し、サーバーが切断されるまで NSMutableData に追加します。次に、その NSData を処理し、元の部分に分割しています。

送信されるデータは、次のもので構成されます。

16 バイトに入力された ID 文字列。

画像番号の文字列で、16 バイトまで入力されます。

生の画像データ。

16 バイトに入力された終了文字列。

問題は、データの最後のチャンクを受信/取得していないことです.JPEG画像の最後が失われ、画像が破損し(ほとんど表示されますが)、終了文字列が欠落します.

データを取得して処理するために GCDAsyncSocket で使用しているコードは次のとおりです。

ソケット接続:

受信したソケット データ

ソケットが切断されました

私はwiresharkを使用しましたが、データが送信されていますが、GCDAsynSocketを通過していません。

だから、私は明らかに何かが欠けています。このようなデータのソケットプログラミングとエンコード/デコードは、私にとって比較的新しいものなので、おそらく私はばかです。

大変助かります!

ありがとう

ガレス

0 投票する
1 に答える
338 参照

objective-c - GCDAsyncSocket クライアント公開鍵

GCDAsyncSocket を使用して単純な TLS サーバーを作成し、クライアントの公開鍵を取得したいと考えています。私はこれを使ってみました:

しかし、私は SecTrustCopyPublicKey メソッドで exc_bad_access を取得します。公開鍵を NSString/NSData として取得するにはどうすればよいですか?

0 投票する
1 に答える
136 参照

ios - AdHoc ディストリビューションで特定の関数を呼び出さない iOS スレッドが、xcode から実行すると機能する

xcode から iPad で実行すると動作するアプリがありますが、AdHoc 配布用に準備すると正しく機能しません。

私のスレッドは次のとおりです。

wifiBackground は次のとおりです。

socketDidRead:

本質的に: wifiBackground は、インターネットに接続されているかどうかを確認し、ソケットを接続し、ネットワークにパケットを送信し (5 秒のタイムアウト)、読み取りが完了するまで待機し (5 秒のタイムアウト)、送信されたパケットが更新されることを繰り返します。 . ネットワークが閉じている場合は、接続を再試行する必要があります。

AdHocとして実行すると、すぐに接続できない場合はループしますが、processReadに行かずに読み取りが完了すると(スレッド全体が)停止します。例えば)

processRead が呼び出されないのはなぜですか? これは xcode から機能しますが、現在機能しない理由がわかりません。

私が試してみました:

しかし、上記と同じことが起こります。

performSelectorOnMainThread を試すつもりでしたが、processRead が使用const unsigned charしているため、正しいオブジェクトではないというエラーが表示されます。

0 投票する
1 に答える
179 参照

ios - これが掲示板システムから送信された最後のパケットかどうかを知る方法

iOS で掲示板システム (BBS) リーダーを作成しています。パケットの送受信を処理するために GCDAsyncSocket ライブラリを使用します。私が抱えている問題は、サーバーが送信するデータを常に複数のパケットに分割することです。didReceiveData() 関数で受信文字列を出力することで、それが起こることがわかります。

GCDAsyncSocket の readme から、TCP がストリームであることを理解しています。また、最後に二重の CR LF など、いくつかのエンド オブ ストリーム メカニズムがあることも知っています。WireShark を使用してパケットを解析しましたが、最後のデータ パケットに何らかのパターンの兆候はありません。このサイトは私が所有していないため、特定のバイトを送信できませんでした。最後のパケットを検出する方法が必要です。それ以外の場合、BBS クライアントはデータの表示をどのように処理しますか?