C#为网络任务(如TcpClient和WebClient)提供了几个有用的类。两者都有BeginX方法(分别为BeginConnect和BeginGetResponse),根据MSDN,EndX应始终遵循这些方法。两者都接受操作完成后调用的委托。我是否应该始终调用TcpClient.EndConnect(即使连接失败?)
但是,假设我们未能建立连接,因此调用这些方法会引发异常。我仍然应该调用相应的EndX方法,还是应该先检查连接是否已建立,然后才能调用它们?
另外,在下面的例子中,我应该使用OnSocketConnected1还是OnSocketConnected2?
static TcpClient m_client;
private static void OnSocketConnected1 (IAsyncResult asynchronousResult)
{
try
{
m_client.EndConnect(asynchronousResult);
}
catch { }
}
private static void OnSocketConnected2(IAsyncResult asynchronousResult)
{
if (m_client.Connected)
{
try
{
m_client.EndConnect(asynchronousResult);
}
catch { }
}
}
static void Main(string[] args)
{
m_client = new TcpClient();
m_client.BeginConnect("http://www.example.com", 555, OnSocketConnected, null);
Console.ReadLine();
}
感谢
也许这是不正确的。我在调用连接失败的回调函数中的EndConnect()时引发了SocketException。它说(我从中文翻译它,可能不准确):对无法连接的网络执行套接字操作。 – guogangj 2016-01-28 08:22:26