C/S Soekct编程问题。S端提示C已经断开,为什么C端还是连接状态? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiNetwork/html/delphi_20061123131217273.html
本人使用了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端也应该断开呀。
这个Socket 没有响应断开的事件。
要自己在使用的时候做一下判断。
idTCPClient和idTCPServer控件 应该可以的吧 S没反应 C不传就行了~
这个地方的问题非常复杂。提示你判断client是否还是活动的办法,只有超时,client是否连接server只有通过send数据看是否出现异常!
用控件是会有这些问题,除非你非常详细的了解控件的实现,在我看来,还不如用winScock Api直接做。
我还不是能能明白你的 意思 : 我大概讲一下 c / s tcp的断开
1.如果果双方正常断开,是问题的
2.在异常情况下, 发送这端能立刻检测到 ,接收端是没反映的
3.如果要保持即时获取 断开 情况 , 必须保持 有数据通信(心跳),自己写代码
4.如果控件没有做到2那么控件有问题; 我想delphi里面这几都应该不会这个问题,
5.基于你上面的情况 ,我不是很了解,问一下, 你的 cs是 不是在路由器的两端?
谢谢。问题已经解决
to ffx132()您能吧你上述程序的源码贴出来共享一下吗?多谢
判断SocketError
94,把源代码共享一下,大家分享,呵呵