Socket.Connect和Socket.BeginConnect之间有什么不同

时间:2013-05-31 01:29:18

标签: c# sockets unity3d

我遇到一个非常奇怪的问题:当我在unity3d webplayer中使用Socket.Connect()时,遇到“System.Security.SecurityException:无法连接,因为没有找到有效的跨域策略”,但是Socket.BeginConnect没问题(),那有什么区别?

1 个答案:

答案 0 :(得分:6)

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(尽管它需要min .NET 2.0 SP1)。

Silverlight中不支持BeginConnect方法(仅支持ConnectAsync),因此如果您打算开发客户端Silverlight应用程序,这可能是另一个问题。