socket断开自动监测的成功解决方案
各位大侠:
最近一直做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)
{
在这个函数中处理检知到切断的方法,比如设置一些状态等。
}
呵呵,这个程序我现在已经能够在对方断开的情况下马上监测到,通过错误处理函数完我方的一些操作,不知道这个帖对大家有没有什么帮助,开发程序以来,这个论坛给我了很大的帮助,我也希望能尽点心力 嘿嘿~