本人使用了D6自带的Socket控件,做了一个C/S程序。C向S端发送图片数据,加入了网络出错后能重新连接的方法。刚开始连接后可正常传送图片数据到S端。而且手动断开后(如:S端关闭,IP被修改,掉线等)也能够自动连接上。但传送5到10个小时后(时间不固定)。C与S连接就有问题了。S端显示C端已经断开(S端有显示功能),C端没有反应。我故计C端本身还认为自己在连接状态。但就奇怪了。S端事件处理中已经显示C断开了呀?重新启动C端又能正常运转!
  本人以为是控件问题就换了Indy的idTCPClient和idTCPServer控件。结果也出现一下的情况--正常运转一段时间后。就不再传了。S端也提示C端已经断开。C端也停止了。
  后来使用其它方法,用了两套控件,一套测试C与S的是否连接,另一套主要是发送图片数据。问题照旧。
  有那位高手能帮帮我呀。我使用了很多方法都没解决这个问题?按道理说S端都提示断开了。C端也应该断开呀。

解决方案 »

  1.   

    这个Socket 没有响应断开的事件。
    要自己在使用的时候做一下判断。
      

  2.   

    idTCPClient和idTCPServer控件 应该可以的吧 S没反应 C不传就行了~
      

  3.   

    这个地方的问题非常复杂。提示你判断client是否还是活动的办法,只有超时,client是否连接server只有通过send数据看是否出现异常!
      

  4.   

    用控件是会有这些问题,除非你非常详细的了解控件的实现,在我看来,还不如用winScock Api直接做。
      

  5.   

    我还不是能能明白你的 意思  : 我大概讲一下 c / s tcp的断开1.如果果双方正常断开,是问题的
    2.在异常情况下,  发送这端能立刻检测到 ,接收端是没反映的
    3.如果要保持即时获取 断开 情况 , 必须保持 有数据通信(心跳),自己写代码
    4.如果控件没有做到2那么控件有问题; 我想delphi里面这几都应该不会这个问题,5.基于你上面的情况 ,我不是很了解,问一下,  你的 cs是 不是在路由器的两端?
      

  6.   

    to ffx132()您能吧你上述程序的源码贴出来共享一下吗?多谢