老问题:异步 socket 怎样判断连接已经断开?

catman3000 2004-12-28 05:04:12
如果网线断开后,异步发送还是成功,但第二次发送,会出现失败:

MessageBox.Show(socket.Connected.ToString());//True
//把线路拔掉
socket.send(...); //成功,但此时连接实际上已经断开
MessageBox.Show(socket.Connected.ToString()); //True
socket.send(...); //这里进入出错处理,提示连接已经被断开

难道每次发送完数据后,还要再发送一次?
...全文
409 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
catman3000 2004-12-30
  • 打赏
  • 举报
回复
UP 一下,除了再发送数据,还有其它办法知道连接已经断开了吗?
catman3000 2004-12-29
  • 打赏
  • 举报
回复
我现在是等待确认信号了,但在发送信息的时候,不能知道它已经断线了,必须等到第二次发送的时候才知道已经断线了。除了发送消息,我还有什么办法知道它已经断线了?
catman3000 2004-12-29
  • 打赏
  • 举报
回复
一分钟发送一次我还在的消息给服务器,实际上断线后,最快也要2分钟才知道断线了。
nga96 2004-12-28
  • 打赏
  • 举报
回复
对。就这样做比较合理的
catman3000 2004-12-28
  • 打赏
  • 举报
回复
上面这篇我看过,跟我的编程方法不一样,好像中间有阻塞的地方,我这里全部是异步的。
catman3000 2004-12-28
  • 打赏
  • 举报
回复
看来还是等待确认信号比较可靠,否则发送出去后,网络速度比较慢,第二次发送可能也会成功,这样没法知道第一次成功发送出去没有。本来想 TCP 比 UDP 好在不用确认,看来也要自己确认了。
zachary7833 2004-12-28
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3638/3638505.xml?temp=.6709101
zachary7833 2004-12-28
  • 打赏
  • 举报
回复
应该等待对方的ACK,这样才能确认发送成功
超过一定时间没有收到ACK,就重发。
如果重发连续N次没收到ACK,就认为对方断开连接。
catman3000 2004-12-28
  • 打赏
  • 举报
回复
我理解你的意思,第一次只是放入缓冲区就返回了。但马上第二次再发送,就告诉我说已经断开连接了,难道没有其它办法读取连接已经断开了,非要再发送一下?每次对方确认一下是可以,我想省掉这步,不知道是不是有没有考虑到的情况。
jimh 2004-12-28
  • 打赏
  • 举报
回复
你所谓的发送成功只是系统已经成功接收了你的请求,并不是数据真正发送到目的的,一般情况下每次发送你应该等待对方的回应,这样才能确认发送成功。

110,570

社区成员

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

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

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