TCP连接,为什么运行一段时间后会断开连接?

frequent 2008-08-07 05:29:54
同一台服务器与多个客户端进行连接,但运行几个小时后,据客户反映,连接会自动断开,需要重新启动一次客户端才可以重新建立连接。
但我的代码里面写有断开连接后,自动重新连接的代码。

代码是用VB写的。

Private Sub Timer1_Timer()
If Winsock1.State <> sckConnected Then
Winsock1.Close
'关闭前面的连接
If m_nPort <> 0 Then Winsock1.Connect m_strIp, CStr(m_nPort)
End If
end sub

第一个不明白的是为什么会无缘无故断开连接呢?另外,即使断开连接了,应该也会自动重新连接起来呀?为什么就没有连接起来呢?
...全文
2401 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hslinux 2008-09-03
  • 打赏
  • 举报
回复
加心跳包保持连接。
taitanyt 2008-09-03
  • 打赏
  • 举报
回复
不懂vb,跟踪一下重连看成功否,以及出错信息
laibach0304 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 baodi_z 的回复:]
你是否确认你的程序一直有数据传输
如果有些时候没有传输,时间长了之后连接会"僵死",就是不能收发数据,但是连接没有断开
[/Quote]

僵死?tcp没有这个状态。使连接断掉的原因太多了。
lz确定你的客户端在那个地址和端口上监听着吗?
frequent 2008-08-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 baodi_z 的回复:]
你是否确认你的程序一直有数据传输
如果有些时候没有传输,时间长了之后连接会"僵死",就是不能收发数据,但是连接没有断开
[/Quote]

肯定一直有数据传输的。
在服务器端有N个winsock控件,分别与各客户端进行连接并传输屏幕数据。
gavin1203 2008-08-08
  • 打赏
  • 举报
回复
长连接需要进行心跳检测,如果这些都有查下,
是不是程序在发送或者接收数据包的时候发生了异常...
frequent 2008-08-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arvid_gs 的回复:]
TCP 连接的应用程序你自己还要加上心跳维护。看自动断开后State是否不为sckConnected,不了解VB所以不知道具体情况,但基本原理相通
[/Quote]

但是我在另一端自动判断了连接状态,如果断开了,会自动进行连接的。
csgdseed 2008-08-08
  • 打赏
  • 举报
回复
帮顶
zdleek 2008-08-08
  • 打赏
  • 举报
回复
你是否确认你的程序一直有数据传输
如果有些时候没有传输,时间长了之后连接会"僵死",就是不能收发数据,但是连接没有断开
frequent 2008-08-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hfcarrey 的回复:]
长连接方式下,如果长时间的没有数据发送,有些路由器会自动将这些连接断开,需要进行心跳维护的
[/Quote]

我的连接状态下一直有数据传输的。是用于桌面监控的。实时监控对方的屏幕,一直有数据传输。
hfcarrey 2008-08-08
  • 打赏
  • 举报
回复
长连接方式下,如果长时间的没有数据发送,有些路由器会自动将这些连接断开,需要进行心跳维护的
arvid_gs 2008-08-07
  • 打赏
  • 举报
回复
TCP 连接的应用程序你自己还要加上心跳维护。看自动断开后State是否不为sckConnected,不了解VB所以不知道具体情况,但基本原理相通

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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