网络问题:如何判断对方Socket断开!

wumylove1234 2006-02-15 09:19:45
以前用WinSocket控件时有事件可以得到连接断开,但现在用.Net的Socket类,我看了很多的Socket例子都没有实现这个.

很多CodeProject网上的聊天程序,都是需要客户端连接发送断开请求的.

急求高手!
...全文
541 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumylove1234 2006-02-15
  • 打赏
  • 举报
回复
顶!



jiezhi 2006-02-15
  • 打赏
  • 举报
回复
也不是唯一的方式,但这个方式比较有效。

还有就是可以先peek数据,比如:

int len = clientSocket.Receive(new byte[1], SocketFlags.Peek);
if (len > 0)
{
//have message to receive
}
而且同时加入上面我提到的异常处理,这样可以比较好的发送是否client socket断开了
wumylove1234 2006-02-15
  • 打赏
  • 举报
回复
jiezhi:
这是唯一的方式吗?
就连MS的WinSocket控件也是这样的实现过程吗?我不太懂网络编程和TCP/IP,忙烦您了!



====CSDN 小助手 V2.5 2006年1月18日发布====
CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
下载:http://szlawbook.com/csdnv2

jiezhi 2006-02-15
  • 打赏
  • 举报
回复
通常是先试探性地发送一个检测消息,然后根据error code来得知是否连接断开了。

参考:
catch(SocketException se)
{
if(se.ErrorCode == 10054) // Error code for Connection reset
// by peer
{
string msg = "Client " + socketData.m_clientNumber +
" Disconnected" + "\n";
richTextBoxReceivedMsg.AppendText(msg);

// Remove the reference to the worker socket of the closed
// client so that this object will get garbage collected
m_workerSocketList[socketData.m_clientNumber - 1] = null;
UpdateClientList();
}
else
{
MessageBox.Show (se.Message );
}
}

caval 2006-02-15
  • 打赏
  • 举报
回复
你用的是哪个类接收?
wumylove1234 2006-02-15
  • 打赏
  • 举报
回复
原来Socket的Receive会阻塞当前线程,而当客户连接断开时候会解除阻塞,这时会得到Reveive的字节数,如是为0就是断开了.谢谢高手指定.结帖.

110,535

社区成员

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

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

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