1

iPhone から Mac に 1 つの画像を正常に送信できるプログラムを作成しました。問題は、これが送信を終了するとすぐに、他のデータを送信したいということです (正確には無関係です)。データを送信しようとすると、次の行によってブロックされます。

if ( !CFWriteStreamCanAcceptBytes((CFWriteStreamRef)_outputStream) ) {
    NSLog(@"FAILED ErrorCode:2 saveAsWallpaper in server.m");
    return;
}

私はストリームなどを閉じません。問題は次の行にある可能性があると思いました。

CFWriteStreamSetProperty(writeStream,kCFStreamPropertyShouldCloseNativeSocket,
                                     kCFBooleanFalse);

しかし、それはソケットが閉じないようにする必要があります。必要に応じてより多くのコードを提供できますが、解決策よりも正しい方向へのポインタが増えることを望んでいます。

どんな助けでも歓迎します、ありがとう!

4

2 に答える 2

1

新しい iPhone5 では、その方法にバグ (または少なくとも矛盾) があるようです。まったく同じ CFWriteStreamCanAcceptBytes が iPhone 3GS では完全に機能しますが、iPhone5 では機能しません。

これまでに見つけた唯一の解決策は、CFWriteStreamCanAcceptBytesもう使用せずに書き込むだけです-これは正常に機能します。

それに関する唯一の問題は、接続が失われ、とにかく書き込むと、タイムアウトに約20〜30秒かかることです。

performSelectorInBackgroundを使用して別のタスクで書き込みを実行し、戻るのに時間がかかりすぎたかどうかを確認できる最初のときにそれを処理するには、接続が失われたことを確認し、ゲートキーパーとして使用できる独自のフラグを設定できます。その後の write の呼び出し。

しかし、99% の場合、接続は問題ないので問題なく動作します。

私は多くの代替手段を試しましたが、write実行が開始されると停止する方法はありません - これが私が使用した理由ですperformSelectorInBackground.

成功しない書き込みには時間がかかり、割り込みをまったく受け入れないため、5 秒で実行されるはずのタイマーでさえ待機する必要があります。

于 2013-03-27T19:50:11.450 に答える