这种情况主要出现在你牵制关闭了一个socket连接。
try
{
readnum = networkstream.Read (bytes,0,bytes.Length);
if (readnum == 0) throw new Exception("DUMP");
}
catch (Exception ec)
{
//引起异常情况:
//1、对方强制退出(还没来得及调用closesocket):System.Net.Sockets.SocketException:"远程主机强迫关闭了一个现有的连接。" 10054
//2、对方关闭socket连接:Socket.Read = 0
//3、对方发送数据后立即关闭socket连接,而自身又在收到对方数据后发送数据给对方:"您的主机中的软件放弃了一个已建立的连接。" 10053
//4、自身关闭socket:System.Net.Sockets.SocketException:"一个封锁操作被对 WSACancelBlockingCall 的调用中断。"  10004
//5、自身关闭socket:Socket.Read = 0
SocketException sockExcept = null;
if (ec.InnerException != null && ec.InnerException is SocketException)
sockExcept = ec.InnerException as SocketException; 
if((ec.Message == "DUMP" && status != ClientStatus.logouted)|| (sockExcept != null && 10054 == sockExcept.ErrorCode) || (sockExcept != null && 10053 == sockExcept.ErrorCode)) 
{
CloseClient();
if (status == ClientStatus.logining)
{
OnError("服务器关闭了socket连接,连接已经断开。");
}
else if (status == ClientStatus.logined)
{
OnLogouted("服务器关闭了socket连接,连接已经断开。");
}
status = ClientStatus.logouted;                                                
}
return;
}