2010-12-03 131 views
1

我有一个服务器/客户端套接字应用程序,并从http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx上的示例看起来都是服务器和客户端关闭并在收到数据后关闭连接。是这样吗? 我一直在使用断开,但我无法重新连接,而是使用shutdown /关闭:谁关闭了套接字连接

  if (_sender.Connected) 
      { 
       _sender.Shutdown(SocketShutdown.Both); 
       _sender.Close(); 
      } 

似乎很好地工作。但是这应该在客户端(发起者)和服务器(收件人)套接字上调用吗? 谢谢

回答

1

您需要在客户端和服务器上这样做,因为它们都使用独立的资源。套接字在关闭时可能会混乱(很多例外),因此您要确保您同时处理客户端和服务器上的异常。

+0

这样做似乎是多余的,现在我知道我肯定会把电话都留在这两个地方。谢谢 – reckface 2010-12-03 16:42:51

0

哪一方开始关闭并不重要。如果关闭发生干净,那么另一方的下一次读取操作将读取0字节。如果关闭没有完全发生,那么另一方的下一次读取操作将引发异常。

一般来说,期望来自任何套接字方法的例外(Close除外fatal exceptions除外)不会引发异常。每当你看到一个例外,只需拨打Close

P.S. Connected没用,在这种情况下Shutdown不会给你带来任何好处。请致电Close

+0

谢谢。我将删除已连接的支票。 – reckface 2010-12-03 16:42:01