同じサブネット内のiosからiosデバイスへの接続()

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

アプリケーションはposix connect()を使用しています。他のモジュールが純粋なCであるため、このメソッドに固執する必要があります。

connect()アプリケーションブロックを呼び出すと、タイムアウトエラーが返されます。 通信はLANの無線LAN経由です

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

Same case with iPhone<>iPhone stops after ARP request, because another iPhone doesn't respond to it. Moreover iOS sends only gratuitous ARP (announces it's mac ip pair). My MAC seems like proceeding this request, because its ARP table has iPhone record, it doesn't work for another iPhone.

I've tried bonjour service, but it also works only with simulator <> device.

My question: Is there any way to allow such communication? Is it possible it is problem with my iPhones only? Is there any explicit way to tell OS to send response for arps, or is it somehow blocked for traffic ios<>ios communication.

1
私はARPが赤ちゃんだと思っています。あなたは、他のデバイスのIPをどのように見つけるかについて詳しく説明できますか?接続を確立する前にブロードキャストパケットを使用しない限り、ピアデバイスのIPアドレスを実際に知ることはできません。間違ったIPアドレスのために、ARPは設計上失敗します。
追加された 著者 Simon Urbanek,
私の例では、他のデバイスのIPを知っていますが、接続したいときに問題が発生します(ピアIPのMAC用ARP(iPhoneに)、応答なし - >タイムアウト後、エラーが返されます)。 MACから接続するときは、ARPはありません.MACのキャッシュは無償のARPメッセージです。単にSYNを送信するだけです。
追加された 著者 macvek,

1 答え

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

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

1
追加された