Socket编程, 一个很奇怪的问题. 无异常断开

csharpstudy 2007-11-15 09:14:48
一个服务器和客户端程序

在服务器端和客户端都有catch(socketexception)

一般情况下,一方断开, 另一方是知道的. 并且装了几台测试都没问题.

现在有一台机器, 客户端连服务器上后, 中间隔十分钟, 什么数据也没传, 也没有显示异常断开,
但过十多分钟, 发数据没有成功, 实际上是断开了.

但是如果连接后, 客户端不停的发数据, 过几十分钟都没断开.

这是什么原因? 是不是可能windows 2003配置的问题, socket建立后, 一段时间不传数据, 会自己断开?

...全文
297 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
whtydn 2007-11-16
  • 打赏
  • 举报
回复
应该是数据包丢掉,造成程序出错,你发小的数据包就不会出现..
csharpstudy 2007-11-16
  • 打赏
  • 举报
回复
搞不清....
wzd24 2007-11-15
  • 打赏
  • 举报
回复
Socket UDP是无连接协议,不存在断不断开的情况。
Socket TCP才会有断开的情况,楼主应该把你的网络环境告诉我们,不然我们给出的答案也有可能不是你要的。
初步判断是某个基础连接(如:拨号连接及其它可断开网络)设置了空闲时间断开,所以会发生这样的现象。
你可以用TCP协议的Keep-Alive机制来检测连接的当前状态。
具体你可以去看看我的Blog:http://blog.csdn.net/wzd24
gxingmin 2007-11-15
  • 打赏
  • 举报
回复
socket UDP连接是不信任连接,一方断开,一方是不知道
socket TCP连接是信任连接,一方断开,一方是知道的,但有时由于网络原因,一方断开,一方可能不知道,所以最好是双方隔一端时间(如:60秒)互发心跳包,心跳包你可以设置成一定的格式,再接收数据时,不考虑心跳包的数据,如果3次(具体次数自己定)没有收到对方心跳包,则认为对方断开连接了
Jack_Senlan 2007-11-15
  • 打赏
  • 举报
回复
帮顶
symbol441 2007-11-15
  • 打赏
  • 举报
回复
楼主用的是什么端口,有可能是端口的原因..

csharpstudy 2007-11-15
  • 打赏
  • 举报
回复
现在我想知道...为什么...它为无原因的断开?

在服务器,和客户端看端口活动情况,,,都是存在的.
boblaw 2007-11-15
  • 打赏
  • 举报
回复
每隔一段時間,發點東西過去,維持心跳
boblaw 2007-11-15
  • 打赏
  • 举报
回复
与设备无关,心跳包是需要的
csharpstudy 2007-11-15
  • 打赏
  • 举报
回复
首先感谢大家的解答

我直接用的socket tcp连接...

网络环境应该没问题....都100M的电信环境...

前面说的..装在有些台上一点问题都没有..

其中有一台, 连接后没有数据发送...10分钟后就会断开,,,,但是两端cath不到断开异常...


现在我改了程序...就是客户端每隔一分钟发个小数据到服务器端.... 一直不会断开



所以我感到非常奇怪

我有点怀疑这台机子上对sockect连接有检测.,,,发现空连接会自动断开, 这台机子上就装了瑞星的杀毒软件,,好像也没有这种功能; 怀疑是ids/ips硬件设备....好像也不是
wuhq030710914 2007-11-15
  • 打赏
  • 举报
回复
不知道LZ哪儿设置出了问题
jingkunli 2007-11-15
  • 打赏
  • 举报
回复
不知楼主用的是什么通导方式,是直接通迅还是用socketJS控年,我用的是socketJS控年.
jzywh 2007-11-15
  • 打赏
  • 举报
回复
m_tcpClient.Client.IOControl(IOControlCode.KeepAliveValues, keepAliveValues, null);

......

110,536

社区成员

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

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

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