1

アプリが中断されている場合でも、tcp ソケットをリッスンするようにアプリをセットアップしようとしています。Apple のドキュメントで説明されているように、Info.plist で voip-background モードを設定しました。今、私は「VoIP 使用のためにアプリのソケットの 1 つを構成してください。」と書かれているところに行き詰まっています。CFReadStreamSetProperty() メソッドでこれを実行しようとしていますが、ポイントはソケットを作成する方法です。ソケットの作成は、次のように標準の C ライブラリを介して行われます。

int mySock = socket(AF_INET, SOCK_STREAM, 0);

これは、既存のライブラリ内の .cpp ファイル内で行われます。これは、VoIP を使用するためにソケットを構成しようとしたものです。

CFStreamCreatePairWithSocket(kCFAllocatorDefault, sock, &readStream, &writeStream);
if(readStream && writeStream)
{
   CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
   CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
}

私がステップスルーすると、見栄えは良いのですが、残念ながら機能しません。アプリがフォアグラウンドからバックグラウンド/サスペンドに移行するたびに、接続が失われ、サーバーからの入力は無視されます。ソケットの構成をこのように行うことができるかどうかはまったくわかりません。それに対する答えが見つかりません。

4

2 に答える 2

1

これは、このフォーラムでの私の最初の投稿です。しかし、これが機能していることがわかりました。

  1. info.plist ファイルに VOIP を設定する
  2. CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

    CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

  3. TCP ソケットを使用する

UDP ソケットでは機能しませんでした。間違っている場合は、この投稿を編集してください。

于 2013-03-21T06:01:39.433 に答える