問題タブ [cfsocket]
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 - Sth iOS サーバー側の CFSocket に問題があり、コールバック関数が呼び出されない
iPhone でオンライン ゲームを構築したいと思います。今は bonjour ではなく、2 人のプレーヤー間の接続を確立するためにコードを作成する必要があります。これを行うには、ソケットの方法を使用する必要があります。そして、これがクライアント上の私のコードです。Macで実行すると機能しますが、Iphoneデバイスのテストでは機能しません。どこがうまくいかないのか本当にわかりません。これは私を大いに悩ませます。誰も同じ問題を抱えていますか?ログには、ソケットが既にポートでリッスンしていると書かれていますが、AcceptCallback 関数は呼び出されません。何が問題なのですか?
CFSocketRef sserveripv4;
ios - CFSocket 受け入れコールバックが呼び出されていません。私は何を逃したのですか?
私は現在、Objective-C で特定のポートにバインドしてリッスンできる単純な TCP サーバー クラスを作成しています。特に-(void) start
、CFSockets を作成し、指定されたポートにバインドし、実行ループに追加する関数があります。次のようになります。
また、コールバック関数を次のSocketAcceptCallback
ように定義します。
コールバックでは、クラスのメンバー フィールドとして保持し、読み取りと書き込みに使用する NSStream のペアへの接続をブリッジします。
問題:このサーバーを実行して、telnet 経由で接続しようとしました。接続しますが、前述のコールバックが呼び出されていません(診断 NSLog を追加して確認しました)。ソケットを実行ループに正しく追加していないと思われますが、自分で間違いを見つけることはできません。それが何であるかについてのアイデアはありますか?
ios - Debug Packet Loss In TCP Communication in iOS/iPad Application
I have an iOS application that remotely connects to 3 sockets(of some hardware). Each Socket has its own priority. One channel is only used for transferring messages between iPad App & hardware, one for Tx/Rx Images, another one for Tx/Rx Videos. I had implemented all the three sockets using GCDAsyncSocket API & things worked fine while using MSGSocket/ImageSocket (OR) MSGSocket/VideoSocket, but when I start using the VideoSocket/ImageSocket/MSGSocket simultaneously this is where things go a little haywire. I Lose Packets of Data.{Actually a chunk of file goes missing :-(} I went through the API & found some bug in the API: Unable to complete Read Stream which I assumed could be a cause of problem. Hence, I Switched to threads & implemented the same using NSThreads/CFSocket API.
I changed only the implementation for ImageSocket/VideoSocket code using NSThreads/CFSocket API & here is the implementation of the same dropbox-ed. I'm just unable to understand as to where the things are going wrong whether it is at iOS App end or at the Server side. In my understanding there shall be no loss of packets in TCP Communication.
Is there a way to Debug This issue. Also I request to go through the code & let me know if any thing is wrong(I know this can be too much that I'm asking for but I need some assurance as to the code implementation is correct). Any help to resolve this issue will be highly appreciated.
EDIT 1: After @JoeMcMahon Comment, I referred to this Technical Q&A & got a TCP Dump - trace.pcap file. I opened this tcp dump with Wireshark & it does show me the bytes transferred between the ports of hardware & iPad.
Also in the terminal when I stopped the tcp dump capture I saw these messages:
12463 packets captured
36469 packets received by filter
0 packets dropped by kernel
Can someone point out the difference between packets captured & packets received by filter?
Note - The TCP dump attached is not for a failed scenario.
EDIT 1.1: Found the answer to difference between packets captured & packets received by filter here
tcpserver - NSXPCConnection でのソケットの使用
NSXPCConnection でソケットを使用すると問題が発生します。
基本的に、メイン プロセスと実行中のヘルパー プロセスがあり、NSXPCConnection を介して確立されます。そのヘルパー プロセスは、サーバーとして機能し、外部接続を受信する特定のポート (111 など) をリッスンする必要があります。
ヘルパー プロセスは、Apple が提供するTCPServer
ヘルパー クラス (ラッパー アラウンド) を使用してリッスン ソケットを開きます。CFSocket
ここにあるコード:
https://code.google.com/p/iphone-remotepad/source/browse/trunk/RemotePad/TCPServer.h?r=238
でソケットが正常に開かれました- (BOOL)start:(NSError **)error
。
外部クライアントは 111 ポートで確立できます。(を介して端末でテストしますtelnet localhost 111
)。
ただし、ヘルパー プロセスは TCPServer コールバックを受け取りませんTCPServerAcceptCallBack
。
ヘルパー プロセスでcom.apple.security.network.client
資格が有効になっています。
また、ヘルパー プロセスの代わりにメイン アプリで TCPServer を実行し、ポート 111 でサーバーをセットアップし、ポート 111 に接続しようとすると、コールバックが発生します。
ヘルパー プロセスがソケット コールバックを受信しない理由について何か考えはありますか? XPC 関連の問題?
ios - 接続に成功すると CFSocket がクラッシュする
これは通信用のクライアントとサーバーのコードですCFSocket
が、接続が成功するとこのコードはクラッシュします。
Client.m
サーバー.m
上記のコードでCFSocketConnectToAddress
は、クライアントで実行するとサーバーがクラッシュし、その後クライアント アプリもクラッシュします。
ios - CFSocketCreate リクエストが UDP 経由で送信されない
以下のコードを使用してソケットを作成しました。
UDP経由でリクエストするためのパラメータとしてSOCK_DGRAM、IPPROTO_UDPを指定しましたが、それでもリクエストはTCP経由で行われ、Wiresharkを使用してのみチェックされます。
どんな助けでも本当にありがたいです。
ios - アプリケーションが辞退して再びアクティブに戻った後に、サーバー側のCFSocketが確実にリッスンするようにするにはどうすればよいですか?
おおよそ次の手順に従う iOS アプリケーションがあります。
- リスニング ソケットを開きます。
- 単一のクライアント接続を受け入れます。
- クライアントとのデータ交換を実行します。
- 「resign active」イベントを受け取ると、クライアントとサーバーのソケットに関連付けられたすべてのリソースを閉じて解放します (つまり、すべての実行ループ ソース、読み取り/書き込みストリーム、およびソケット自体を無効にして解放します)。
- アクティブを再開すると、リスニング ソケットを元に戻して通信を継続します (クライアントは、手順 4 で iOS アプリがアクティブを辞退した後、再接続できるようになるまで再接続を試み続けます)。
クライアントとサーバーの間で接続が行われるたびに、ステップ 5 の後に、リッスンのためにサーバー ソケットを再度開くことができずにアプリケーションが再開されることがわかります。つまり、手順 5 ですべてが解放されても、アプリケーションは再バインドしてソケット アドレスをリッスンすることができません。さらに悪いことに、リッスン ソケットを再度セットアップしようとしても、CFSocket API 呼び出しでエラーが検出されません。
一方、iOS アプリケーションがアクティブを辞退し、以前に接続を受信せずに再び再開した場合、クライアントは、アプリケーションが辞任して再び再開するまで、一度だけ接続できます。この場合、上記と同じ動作が観察されます。 .
この問題を説明する最小限のアプリケーションの例は、次のリポジトリにあります。
https://github.com/dpereira/cfsocket_reopen_bug
最も関連性の高いソースは次のとおりです。
本格的なアプリはhttps://github.com/dpereira/confluxにあります。
ソケット (および関連リソース) のセットアップ/ティアダウンに何か問題がありますか?