0

そこで、AsyncSocket を使用して Java アプリケーションを実行しているコンピューターにネットワーク接続する iPhone 用のアプリケーションを作成しています。Java 側では、iPhone がサーバーに接続すると「OK」と出力されるはずです。また、iPhone 側に sleep() コマンドを追加したので、サーバーに接続した後、データを送信してから 5 秒間スリープします。しかし、Java 側では、「OK」を含むすべてのデータとデータがスリープ コマンドの後に出力されます。そのため、プログラムの実行が終了するまでiPhoneが接続されないようです。誰か助けてくれませんか?ありがとう...

4

2 に答える 2

1

この問題が発生する理由は、AsyncSocketがrunloopで非同期に実行されるが、sleep()を呼び出すと、AsyncSocketが実行しようとしているrunloopをブロックしているためです。

[asyncSocket connectToHost:...]を呼び出すと、メソッドはすぐに戻り、接続の試行はバックグラウンドで続行されます。デリゲートメソッドは、接続が確立されたときに通知します。ただし、(AsyncSocket内で)接続のセットアップを終了するコードも、runloopで実行する必要があります。

同様に、[asyncSocket writeData:...]を呼び出すと、メソッドはすぐに戻ります。このデータを送信するコードは、ソケットの実行ループで実行するようにスケジュールされます。ただし、sleep()を呼び出すと、そのコードが実行されなくなります。

于 2011-05-07T03:12:31.023 に答える
1

AsyncSocket は、起動して忘れることを意図しています。何かが起こるのを待ってはいけません。このクラスの全体的な目的は、その処理をバックグラウンドで実行し、完了時に通知することです。
ブロッキングソケットが必要な場合は、別のものを使用する必要があります。

于 2010-06-25T14:16:13.390 に答える