7

Network Programming Topics Conceptual Guide 」の「 Using Sockets and Streams 」の章で、Apple は次のように述べています。

注: POSIX ネットワークは、iOS のセルラー無線をアクティブにしません。このため、POSIX ネットワーク API は一般的に iOS では推奨されません。

また、「Networking Overview Guide 」の「 Networking Tips and Pitfalls 」の章で、Apple は次のように述べています。

iOS では、POSIX 関数または CFSocket を使用してソケットを直接使用しても、デバイスのセルラー モデムまたはオンデマンド VPN が自動的に有効になりません。

さて、iOS では POSIX ソケットも CFSocket も使用しないでください。CFSocket は、RunLoops を介した非同期ネットワークをサポートする POSIX ソケットの薄いラッパーです。問題ない。しかし、 UDP Socketが必要な場合、どの API を使用すればよいでしょうか?

さらに Apple は、「Networking Overview Guide」の「 Networking Tips and Pitfalls 」の章で次のように述べています。

ホストに接続する前に DNS 名を解決しない

したがって、理想的には、宛先アドレスの IP アドレスの代わりに DNS 名を受け入れる、POSIX API および CFSocket 以外の UDP ソケットを管理するための API が必要です。

私は目が見えないかもしれませんが、そのような API を見つけることができません。何か案は?

(Apple 以外の) サードパーティ API を使用することは興味深いことではありません。そのような API はいずれかの Apple API に基づいている必要があり、その場合、この Apple API を直接使用できるからです。POSIX ソケット用に独自のラッパー API を作成するのは簡単なことです。これまでに非常に多くのソケット ラッパーを作成してきたので、厄介な落とし穴はすべて知っています。ただし、最初の問題である POSIX API は使用しません。

4

4 に答える 4

2

私はAppleにまったく同じ質問をしましたが、彼らの回答は多かれ少なかれ、UDPソケット用の高レベルのインターフェースがないというものです。Appleがガイドで述べていることに関係なく、UDPを使用する場合は、POSIXソケットを直接使用するpoll()select()、またはのような非同期マネージャーと組み合わせて使用​​するか、POSIXソケットを作成して(必要に応じて使用bind()および/またはそのconnect()上で)、ラップします。RunLoop統合を取得するためにCFSocket使用するオブジェクト。CFSocketCreateWithNative()これは、存在する最高のAPIです。すべての高レベルAPIは、TCPでのみ使用されるように設計されています。

于 2012-12-21T10:05:33.263 に答える
1

は同じことを試みていましたが、低レベルの API はセルラー無線とオンデマンド VPN をアクティブにしないとドキュメントに書かれていますが、TCP 接続には完全に当​​てはまらないことが判明しました。

UDP の場合、これは当てはまり、UDP パケットはほとんどの場合送信されません。これを解決するには、下位レベルの API を使用して TCP のリッスン ソケットを開くだけで、セルラー無線またはオンデマンド VPN がアクティブになり、完了したらソケットが閉じます。

TCP の場合、iOS デバイスのサーバー側コードに低レベル API を使用できます。これにより、セルラー無線またはオンデマンド VPN がアクティブになりますが、iOS デバイスのクライアント側コードの場合は、より高いレベルの API を使用することをお勧めします。提供された。いずれにせよ、無線はアクティブであり、パケットが送信されないことを心配する必要はありません。

ところで、これは私が現在行っていることです。

于 2014-12-11T07:01:24.790 に答える
0

Apple には、UDP の使用方法を説明するサンプル コードがあります。私自身は試していませんが、これはあなたにいくつかの良い指針を与えるはずです:

https://developer.apple.com/library/mac/#samplecode/UDPEcho/Introduction/Intro.html

于 2012-12-18T12:01:40.560 に答える