各位大侠:
  
  最近一直做C#的程序,关于自动检知socket断开的问题,有了一点小心得还希望与大家分享。刚刚看完CSDN里的这个帖子,觉得写的有不正之外,还望一起讨论:《老问题继续研讨,如何判断对方Socket断开? 我测试过很多朋友的做法,但是请进!》不管是Client 还有Server 我现在都为他们建立一个受信线程,具体业务代码不复述了,把主要判断语句与大家分享:
                        ///收信结果(收信的送信结果判断,收到一条电文后,根据TCP协议会自己发一消息,告知对方我已经收到这条电文。
if (SendORReceive.SEND == _rcvStateInfo.SndRcvFlg)
{
   if (_rcvStateInfo.Session.MySocket.EndSend(_iAysnc) < 1)
   {
       ////送信失敗
       SocketErrorProc(false);
       break;
   }
}
///受信結果(收到电文的处理,这里面除了是收到电文外,还包括收到对方回复的消息,例如上面的那个判断)
else
{
    ReceiveMsgProc();
}////////////////////////////////////////////////
    这里面才是真正的收信处理函数,
        private void ReceiveMsgProc()
        {
            int rcvdByteLen;
            string tempTelStr;            try
            {
                rcvdByteLen = _rcvStateInfo.Session.MySocket.EndReceive(_iAysnc);
            }
            catch(SocketException)
            {
                ///收信不能的情况,server切断(受信不能または、サーバから切断したい)
                SocketErrorProc(false);
                return;
            }
       。 下面是业务处理,不复述    
    //ソケット障害処理関数 socket错误处理。
        private void SocketErrorProc(bool isFatalErr)
        {
      在这个函数中处理检知到切断的方法,比如设置一些状态等。
 
        }
呵呵,这个程序我现在已经能够在对方断开的情况下马上监测到,通过错误处理函数完我方的一些操作,不知道这个帖对大家有没有什么帮助,开发程序以来,这个论坛给我了很大的帮助,我也希望能尽点心力 嘿嘿~