0

できる限り詳しく説明するようにします。アプリで iPhone から取得ユニットに接続しようとしています。IP4 を使用しており、取得ユニットは DHCP をサポートしていないため、特定の静的 IP とポート番号を持つデバイスを常にスキャンします。

ユニットと iPhone 間の接続をテストする前に、デスクトップを使用してアドホック ネットワークを作成し、iPhone で試してみました。これは私のコードの一部です。

CFSocketContext CTX = { 0, description, NULL, NULL, NULL };
/* Create the server socket as a TCP IPv4 socket and set a callback */
/* for calls to the socket's lower-level accept() function */
TCPServer = CFSocketCreate(NULL, PF_INET, SOCK_STREAM, IPPROTO_TCP,
                           kCFSocketAcceptCallBack
                           , (CFSocketCallBack)WiFiCallBack, &CTX);
    /* Set the port and address we want to listen on */
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = htonl(INADDR_ANY);

CFDataRef addressData = CFDataCreate( NULL, (UInt8*)(&addr), sizeof( struct sockaddr_in )      );
CFSocketSetAddress(TCPServer, addressData);

iPhone に割り当てられた IP をデスクトップの PC アプリにフィードすると、デスクトップと iPhone の間でデータ転送を行うことができます。ただし、iPhone に静的 IP を設定し、その IP を使用して PC アプリを任意のデバイスに接続しようとすると、機能しません。

同じことが私の取得ユニットにも当てはまります。コールバック関数はまったく呼び出されません。

私は切実に助けが必要なので、どんな形の助けも歓迎します。ありがとう。

4

1 に答える 1

1

申し訳ありませんが、あなたの投稿はあまり明確ではありません。

iPhone でサーバー ソケットを確立し、別の場所から接続しようとしていますか?

これは多くの理由で問題になります。

まず、あなたのIPは同じではないということです. WIFI に接続すると、少なくとも現在のネットワークでルーティング可能な IP が得られます。

しかし、3g (または LTE など) に接続すると、指定された IP にまったくルーティングできない可能性があります。

十分に長い間存在していた一部のインターフェイスに完全にルーティング可能な IP アドレスがあったとしても、iOS はこのように設計されていません。アプリケーションは、バックグラウンドで効率的に実行できず、サーバー ソケットをリッスンできません。これは、永続的なソケットと voip バックグラウンド モードでシミュレートできます。ただし、それには別のサーバー コンポーネントが必要です。

iPhone からのポーリングを試すこともできます。これは、要件を満たす可能性があります。

于 2012-11-27T18:06:14.153 に答える