Delphi的ClientSocket连接问题 300(100分)

  • 主题发起人 主题发起人 Suvi
  • 开始时间 开始时间
S

Suvi

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题不应该难得倒大家的,我只好加分了
Delphi的ClientSocket连接问题
这是一个很奇怪的问题 SocketServer可以是用C/delphi写的,运行平台可以是nt/9x/linux/unix
客户端用的是Delphi的ClientSocket控件。
1.运行 SocketServer
2.运行 ClientSocket
3.连接 Socket
4.关闭 SocketServer
5.因为 Client端有一个Timer,会定时检查ClientSocket是否有连接,如果没有连接就会
强制连接:ClientSocket.Active=True;
6.因为 SocketServer根本被关闭了,所以连接失败
7.但是这个连接过程一直在继续
8.4到6个小时后,Client端报错,说 socket 在 connect 时出错,错误代码10055,查看
错误报告,WIN32API指示此错误为 socket 无法开辟可用的缓冲

9.这个问题屡试不爽,让我很困惑

请各位高手出招

这里有源码和程序,大家可以运行试验一下
<a href=http://202.96.154.12/xwtp/socket/test.zip>test.zip</a


 
其实连接分几个步骤的
1.首先用socket函数在本地建立一个socket,并分配一定的缓冲.
2.再用connect函数与服务器端建立连接.
当你在timer中不断ClientSocket.Active=True;时缓冲越来越多,最后就不够了
 
您显然没有看到我得例子,建议您拿回去看看
 
只可惜你的例子下不来呀, xwtp目录根本不存在
 
把这个url放到你的浏览器中,然后回车
http://202.96.154.12/xwtp/socket/test.zip
 
听听!!
 
四五个小时后还出错的话,,,为什么不直接禁止用户使用或结束程序,
我做的机房管理程序就是这么处理的.....过一段时间服务器还连不上的话就停掉客户端.
 
现在地问题不是要不要停掉客户端,而是为什么会出错
 
这个问题很难吗?继续加分100
 
你能先把你的程序发给我看一下吗,我怀疑问题是双方面的,客户端和服务端都可能有一定的问题
 
你是否发现断开连接后,不断地重复连接而没有将clientsocket.close。
建议发现连接断开后,先将clientsocket.close
延时一分钟左sleep(60000),再重新打开clientsocket.open。
 
强制连接不要 Active=True; 而用 open 和 close 关闭.

(最近我也在写这个,呵呵,来交流一下? qq:3006555)
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=494488
 
只要你的定时器时间在60秒以内,都会遇到这种情况的。
定时时间越短,发生得越快而已,这是我在另一贴子的回答,可惜那个楼主不理解~~~
http://www.delphibbs.com/delphibbs/dispq.asp?LID=1142464

除非你直接用WinSocket API 来操作,就可以避免这个问题,因为Socket初始化时,
都会指定N个超时时间的(针对N个不同的状态)。但这样得不偿失。
 
建议你直接用Winsock API做,用一个线程去连接,连接上了以后,你就可以用TClientSocket
去连接这个服务器了,我手头上就有代码,你如果要直接找我,QQ:775033.这个程序就是上次
帮别人解决这个问题专门做的!
你连接失败以后要 TClientSocket.active:=false;释放资源,TClientSocket打开以后他会建立一个
新的TSocket,如果你没有释放,开始还好,以后就会很占资源....导致出错!
 
唉!老第,问问题前为什么不搜索一下呢?
http://www.delphibbs.com/delphibbs/dispq.asp?LID=1100777
和你的情况一模一样。
 
我认为该结束这个帖子了!!!
 
后退
顶部