2

私は現在、CFStreamを使用してC#サーバーと通信するiOSアプリを開発しています。この接続を介して1つのTCPパケットを送信すると、想定どおりに動作します。ただし、2つのパケットを送信しようとすると、両方とも失敗します。

サーバーは、ここにあるような非同期になるように設計されています。iOS側は、このチュートリアルで説明されているように、CFStreamクラスを使用して設計されています。

なぜこれが発生し、どうすれば修正できますか?すべての助けは大歓迎です!

編集:C#サーバーをPythonサーバーに置き換えようとしましたが、システムは問題なく動作しました。これは、問題がサーバー側にあることを示唆しています。サーバーが最初のパケットを受信した後、誤って接続を閉じている可能性がありますか?

4

2 に答える 2

1

誰がTCPソケットを閉じているかを確認することから始めます。サーバーでWiresharkを実行して、その接続でFINまたはRSTを送信しているユーザーを確認します。それは問題を半分に分割します。

于 2012-05-20T23:08:30.337 に答える
0

サーバーは、最初の情報パケットをクライアントに送信した後、接続を閉じるように設定されていることがわかりました。解決策は、

handler.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,
        new AsyncCallback(ReadCallback), state);

ReadCallback()メソッドで、要求の処理後にクライアントのリッスンを再開するようにします。

于 2012-05-26T21:15:02.617 に答える