【发布时间】:2014-06-03 15:02:06
【问题描述】:
下面的代码将失败,因为 Bind() 是在尚未“准备好”的套接字上调用的,即使有准备套接字的代码。准备套接字的代码超出范围(另一个 Try 块)。
// prepare socket
try
{
socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
}
catch (Exception e)
{
log.write("socket preparation failed");
}
finally
{
if (socket != null)
{
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
}
// bind
try
{
socket.Bind(endPoint);
}
catch (Exception e)
{
log.write("Bind() failed");
}
finally
{
if (socket != null)
{
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
}
// enable listening
try
{
socket.Listen(1000);
}
catch (Exception e)
{
log.write("Listen() failed");
}
finally
{
if (socket != null)
{
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
}
【问题讨论】:
-
把它放到不同的方法中。
-
不要破坏您自己的帖子,而是接受答案,发布您自己的答案(并接受它),或者将您的问题标记为版主删除。
标签: c# try-catch try-catch-finally