2012-02-06 12 views
1

iPhone(またはiPod)から別のiPhone(またはiPod)に標準的なTCP接続を行う必要があるIOSアプリケーションを開発します。接続は、シミュレータとデバイス上のアプリケーション間、および2台のシミュレータ間でうまく機能します。同じサブネット内のiosからiosデバイスへの接続()

アプリケーションは、POSIXを使用(接続)し、他のモジュールがC.

接続()アプリケーションブロックを呼び出し、タイムアウトエラーが返された後の場合に純粋であるので、私は、この方法に固執しなければなりません。 通信はLAN内の無線LAN経由です

私はトラフィックを傍受し、シミュレータに接続した後、デバイスがARPを送信し、応答後に標準のTCPハンドシェイクが行われ、セッションが確立されました。

iPhoneと同じ場合<> iPhoneはARPリクエスト後に停止します。別のiPhoneが応答しないためです。さらに、iOSはgratuitous ARPだけを送信します(MACのIPペアを発表します)。私のMACはこのARPテーブルがiPhoneレコードを持っているので、このリクエストを進めるように思えます。それは別のiPhoneでは動作しません。

私はbonjourサービスを試しましたが、シミュレータ<>デバイスでも動作します。

私の質問: このような通信を許可する方法はありますか?それは私のiPhoneでのみ問題である可能性がありますか? OSにアルプスの応答を送るようにOSに明示的に指示するか、それとも何らかの理由でトラフィックがブロックされていますか?<> iosの通信。

+0

私はARPが赤ちゃんだと思っています。あなたは、他のデバイスのIPをどのように見つけるかについて詳しく説明できますか?接続を確立する前にブロードキャストパケットを使用しない限り、ピアデバイスのIPアドレスを実際に知ることはできません。間違ったIPアドレスのために、ARPは設計上失敗します。 –

+0

私の例では、他のデバイスのIPを知っています。接続したいときに問題が発生します(ピアIPのMAC用にARP(iPhoneへ)を送信し、応答がない - >タイムアウト後にエラーが返されます)。 MACから接続するときは、ARPはありません。MACキャッシュは無償のARPメッセージで、SYNだけを送信するためです。 – macvek

答えて

1

これが役立つかどうかはわかりませんが、ネットワーク上で自分自身をアナウンスするデバイスと同様のことを行っているプロジェクトに取り組んでいます。私たちはSSDPを使用して、あるデバイスからアライブ要求を送信し、他のデバイスはマルチキャストアドレスとポートでリッスンしています。各デバイスが生存状態を受信すると、IPアドレスやポートなどの関連情報があればすべてのデバイスに応答を送信します。残念ながら、SSDPはsendとforgetのタイプのプロトコルなので、そこに問題があります。 IPアドレスとポート情報を使用して、各デバイスに直接メッセージを送信します。

また、この状況があなたの状況に役立つかどうかはわかりませんが、私はこの作業をこれまでのところよく見てきました。

関連する問題