問題タブ [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.
proxy - SOCKS5 接続タイムアウト (GCDAsyncSocket)。(OpenFire、XEP-0065、iOS XMPPFramework)
問題: iOS XMPPFramework と OpenFire サーバーを使用して TURNSocket (XEP-0065 - SOCKS5) を試みています。ファイルを送受信できるようにしたい。ただし、ほとんどのシナリオでは、受信者は応答を返しません。私は現在、問題がタイムアウトになる OpenFire プロキシ サーバーに関係しているのではないかと考えています。これはローカル ネットワーク上に設定されており、ホスト ファイルを編集してそれを指すようにしました。
注:私のコードのベースは、次のチュートリアルからのものです:http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-server-setup/
XML とエラー: 送信者は次の XML を送信します (他のいくつかの XEP-0065 XML 投稿が前後に送信された後)...
アプリの別のインスタンスとチャットすると、proxy.beta.myCompany.co.uk を使用しようとすると、受信者に次のエラーが表示されます。
エラー Domain=GCDAsyncSocketErrorDomain Code=3 「ホストへの接続試行がタイムアウトしました」
私の主な質問は、なぜタイムアウトしたのですか?
追加情報: アプリの 1 つのインスタンスと Adium IM チャット クライアントの間でチャットを行っても、応答がありません。ただし、Spark IM チャット クライアントとチャットすると、次の応答が返されます...
ios - GCDAsyncSocket readDataWithTimeout と didReadData は、1460 バイト (1 パケット) を超える受信データ文字列を切り捨てています。
私の iOS アプリは GCDAsyncSocket を使用してサーバーからデータを受信しています。サーバーは 1 分に 1 回、外部データを収集しています。アプリは定期的にサーバーに接続し、このデータを受信します。サーバーは送信された内容を追跡するため、1 分間のデータは 1 回だけ送信されます。サーバーは過去 1 時間のデータのみを保持しています。各分のデータは、約 100 バイト (+/- 20 バイト) の文字列です。
文字列が受信され、分単位で区切られ、各分が各分のデータのさまざまな量に分割されます。
アプリがサーバーに 1 時間以上接続していない場合、アプリは 60 分間分のデータをダウンロードします。これが発生すると、約 15 分のデータしか取得できません。これは、メソッド readDataWithTimeout が readQueue に 1 つのパケットしかロードしないため、1460 バイトに制限されているという事実まで突き止めました。キューに 2 番目のパケットを追加すると、さらに 1460 バイトのデータが得られることがわかりました。文字列が最大長で、60 個の文字列をダウンロードする場合、すべてをキャプチャするには 5 パケットで十分です。
- 読み取りキューに必要以上のパケットを追加し、ほとんどの読み取りで 1 つのパケットしか使用しない場合、最終的にパケット キューがオーバーフローすることはありますか? 未使用のパケットを一掃するために何らかのタイムアウトを適用できますか? 特定の読み取りイベントに必要なパケット数をアプリが予測する方法はありません。
もう 1 つの問題は、パケットのデータ文字列の最後の 1 分が必然的に 2 つのパケットに分割されることです。私がやりたいのは、すべてのパケットの NSData インスタンスを収集し、それらを 1 つの大きな NSData インスタンスに連結し、それを文字列に変換し、その文字列を通常どおり解析することです。
- NSData を結合して結果の文字列を解析できるように、特定の読み取り要求に対して受信される最後のパケットがいつ受信されたかを知るにはどうすればよいですか? 各分の文字列は感嘆符「!」で終わりますが、送信の終わりを示す一意の記号はありません。問題1を解決するのと同じタイムアウトが問題2を解決すると思います。
このアプリはすでに Android 向けに公開されています。したがって、可能であれば、iOS バージョンに対応するためにサーバーと Android コードを変更することは避けたいと考えています。
cocoa-touch - GCDAsyncUdpSocket インターネット経由の UDP 通信
インターネット経由で GCDAsyncUdpSocket を使用すると問題が発生します。ローカル コンピューターでテストを行っているときは、すべて正常に動作します。
3G キーを使用してインターネットに接続されたコンピューターと、wifi 経由で接続された iPod の間で UDP メッセージを送信しようとしています。残念ながら、メッセージは送信されません。GCDAsyncUdpSocket の例で同じテストを実行しようとしました: UdpEchoClient と UdpEchoServer も動作しません。
3G キーを使用してコンピューターのアドレス IP を知るために、システム設定 -> ネットワークを調べ、http://whatismyipaddress.com/も調べたところ、アドレスが異なることがわかりました。両方とも機能していません。
WiFi 経由で接続されている私の iPod は NAT/ファイアウォールの背後にありますが、この Web サイトによると: https://www.gotroot.com/blogpost4-Why-your-should-never-forward-UDP-out-of-your-firewallそれ問題になるべきではありません。
ポートを開かずに 2 つのデバイス間でメッセージを送信することは可能ですか? 3G を使用しているコンピュータに 2 つの異なる IP アドレスがあるのはなぜですか?
cocoa - GCDAsyncSocket 読み取りデータの問題
ネットワーク インターフェイス ライブラリとして GCDAsyncSocket を使用する Cocoa ライブ ビデオ プログラムがあります。ビデオ フレームを再生すると、明らかに動きが鈍くなります。たとえば、ビデオの時間は通常のほぼ 2 倍遅くなります。パフォーマンスを調べたところ、GCDAsyncSocket の readDataToLength メソッドの呼び出しがまばらすぎることがわかりました。以下は、タイムスタンプ付きのログです。
ソケットを作成するときに別のデリゲート ディスパッチ キューを設定しましたが、あまり役に立ちません。メッセージには固定ヘッダーがあり、最初にヘッダーを読み取り、次にペイロードを読み取ります。
ソケットからのデータの読み取り速度を向上させるアイデアはありますか? ありがとう!
objective-c - Objective-C の委任
iOSとobjective-cは初めてですが、 GCDAsyncSocket を使用してアプリケーション全体のTCP / IPサーバーに接続しようとしています.各viewControllerで、サーバーとの間で送受信を開始したいので、毎回cocaSocket の新しいインスタンスを割り当て、im new client のようにサーバーに送信します。
では、cocaSocket の 1 つのインスタンスをアプリケーション全体に適用できるようにするにはどうすればよいでしょうか。
返信ありがとうございます。
objective-c - 接続時に CocoaAsyncSocket がクラッシュする
ネットワーク コードを別のクラス IBStore に分離しました。コードは非常に簡単で、提供されているサンプルに基づいています。
と:
メイン ビュー コントローラーから IBStore をインスタンス化する方法は次のとおりです。
残念ながら、didConnectToHost
アプリは を実行する代わりに、実行中に GCDAsyncSocket.m でクラッシュ (ハング) します。socket4FD = socket(AF_INET, SOCK_STREAM, 0);
なぜこれが起こるのかについてのアイデアは高く評価されます。ありがとうございました!
objective-c - GCDAsyncSocket タグ パラメータ
などのメソッドでタグパラメータを使用する方法を考えています
タグを使用してパケットのタイプを識別したい場合はどうなりますか? たとえば、tag == 2 は、パケットがクライアントからのメッセージであることを意味し、tag == 1 は、パケットがサーバーからのメッセージであることを意味します...これでよければ、readData: withTag: を呼び出す必要がありますか?数回 (異なるタグごとに 1 回) ?
「タグを気にせずにすべてのデータを読み取る」と言ってから、 didReadData: withTag: メソッドでタグに従ってデータを処理する方法はありますか?
ios - Wi-FiおよびBluetooth経由のマルチキャストにGCDAsyncUdpSocketを使用する方法
現在、GCDAsyncUdpSocketを使用して、iOSデバイス間でwifi経由でマルチキャストデータグラムを送信しています。
コードは非常に単純です。
クライアント
サーバ
これはwifiでうまく機能します。Bluetoothでも動作させるにはどうすればよいですか?たくさんグーグルで検索しましたが、何も見つかりません... 2つの別々のソケットを作成する必要がありますか?1つはwifiインターフェースにバインドされ、もう1つはbluetoothインターフェースにバインドされていますか?
編集:または私は何か基本的なことについて混乱していますか?これは可能でなければなりません。GameKitのGKSessionはまさにこれを行いますよね?
objective-c - MountainLionのGCDAsyncSocketに関する問題
Mac(Objective-C)アプリケーションでGCDAsyncSocketクラスを使用すると問題が発生します。これが私が得るエラーです:
私はここで問題を理解するのに本当に苦労しています。GCDAsyncSocket.hファイルと.mファイルを削除して再度追加してみました。すべてのインポートが.mファイルではなく.hファイルをインポートしていることを確認しました。私はプロジェクトをクリーンアップし、新しいプロジェクトを最初から作成しようとさえしました。これを引き起こしている可能性のあるものについての洞察は素晴らしいでしょう。(注:私はMountain Lionにアップグレードしただけです-それが原因である可能性があるかどうかはわかりません)
gcdasyncsocket - 2 つの異なるソースからのデータは GCDAsyncSocket で競合しますか?
私はこの問題に巻き込まれました。
簡単に言えば、
私はいくつかのデバイスを持っています。それぞれがサーバーに写真を送信します。pic のサイズのため、データはいくつかの部分に分かれます。したがって、didReadData: メソッドが呼び出されるたびに、受信データを追加する必要があります。
ここで問題が発生します:(
2 つ以上のデバイスが同時にサーバーに pic を送信すると、データが競合しますか?
つまり:
DEVICE1 は data11 data12 data13 を送信します
DEVICE2 は data21 data22 data23 を送信します
得られたデータが次の順序である可能性はありますか: data11 data21 data12 ....(2 つのデータのバッグが混同された)?