我遇到了一个很奇怪的问题:当我在unity3d webplayer中使用Socket.Connect()时,遇到“System.Security.SecurityException: Unable to connect, as no valid crossdomain policy was found”,但是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 提供 SocketAsyncEventArgs 作为参数,与 BeginConnect 提供的 3 个参数相比,该参数包含更多信息。另外我知道 ConnectAsync 比 BeginConnect 晚引入,并解决了一些与超时相关的问题(现在不记得这个讨论的来源了)。尽可能首选 ConnectAsync(尽管它需要最低 .NET 2.0 SP1)。
Silverlight 中不支持 BeginConnect 方法(仅支持 ConnectAsync),因此如果您打算开发客户端 Silverlight 应用程序,这可能是另一个问题。