非常に奇妙な問題に遭遇しました。unity3d webplayer で Socket.Connect() を使用すると、「System.Security.SecurityException: 有効なクロスドメイン ポリシーが見つからなかったため、接続できません」というメッセージが表示されますが、Socket.BeginConnect() は問題ありません。違いは何ですか?
1 に答える
Socket.Connect: http://msdn.microsoft.com/en-us/library/ych8bz3x.aspx
Socket.BeginConnect http://msdn.microsoft.com/en-us/library/6aeby4wt%28VS.80%29.aspx
ドキュメントの状態 Connect は同期であるため、接続が確立されるまで現在のスレッドがブロックされます。
BeginConnect メソッドは非同期です。つまり、別のスレッドで接続を行い、接続が完了したときに通知を返します。現在の呼び出しスレッドをブロックしません。EndConnect を呼び出す必要があります。
Socket.ConnectAsync は、BeginConnect によって提供される 3 つのパラメーターと比較して、より多くの情報を含むパラメーターとして SocketAsyncEventArgs を提供します。また、ConnectAsync が BeginConnect より後に導入され、タイムアウトに関連するいくつかの問題を解決していることも知っています (この議論のソースを今思い出せません)。可能な場合は ConnectAsync を優先します (最小 .NET 2.0 SP1 が必要ですが)。
Silverlight では BeginConnect メソッドがサポートされていない (ConnectAsync のみがサポートされている) ため、クライアント側の Silverlight アプリケーションを開発する場合は別の問題になる可能性があります。