socket断开自动监测的成功解决方案

zhou2620 2009-12-17 05:03:04
各位大侠:
  
  最近一直做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)
{
      在这个函数中处理检知到切断的方法,比如设置一些状态等。

}


呵呵,这个程序我现在已经能够在对方断开的情况下马上监测到,通过错误处理函数完我方的一些操作,不知道这个帖对大家有没有什么帮助,开发程序以来,这个论坛给我了很大的帮助,我也希望能尽点心力 嘿嘿~

...全文
122 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqsfd 2009-12-17
  • 打赏
  • 举报
回复
水平不够,没看明白,对C#提供的异步方法一直不感冒,面壁去
你这不是在if中的子if判断吗?感觉你是在东西,发现没发送出去才能检测出链接断开呀,要是那个链接在那一直不发送东西也能马上检测出链接断开吗?
正宗熊猫哥 2009-12-17
  • 打赏
  • 举报
回复
看见太阳文了
caymanyang 2009-12-17
  • 打赏
  • 举报
回复
日本人???

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧