高分送大侠!(200分)

  • 主题发起人 主题发起人 kusanagi
  • 开始时间 开始时间
K

kusanagi

Unregistered / Unconfirmed
GUEST, unregistred user!
最近我做了个项目,客户端与服务器都在Internet上。客户端调用服务器发布的方法来
上传数据文件,文件为一个VarArray类型的参数,大小1M左右。采用TSocketConnection
服务器上开socketsvr.exe。
问题:有的时候Socketsvr会占用99%系统资源,并且当客户端断开连接后服务器上显示
的连接也没有断开,Socketsvr仍然占用99%系统资源,只能手工将连接断开。
谁知道该如何处理这种情况?
 
在internat用scktsrvr.exe用它,我不是很清楚了
不过可能是因为传文件的时候,socket发送数据所引起的,我记得以前写socket发大家伙的时候
就是会把CPU占的满满的,像死了样,而且不是1秒2秒的事,最后我只好分开发送,在客户端接收
的时候,等待一下数据的到来,不然会有异常.
begin
tranfile;
//初始客户传数据.
readfile(var data: olevariant);
//每次人服务器上读一些数据,如10k--100k,不要太大
endtranfile;
//重置
我想这样会好点.
至于,客户端断开,而服务端看不到,在internat我也没做过试验.
不然你修改vcl/scktsrvr.dpr,加入一个时间控件timer,定时检查客户端是否有响应,过了timeout
时间,你就把它给kill.
做法很简单.就是主线程定时PostThreadMessage给TServerSocket生成的客户线程,
在客户线程中收到这个消息,就去看看这个连接是否过了timeout时间,过了的话就ClientSocket.Connected := False
 
学习
并提前!
 
我也曾有同感,我记得一位前辈曾说过要将“数据先分割”----与TCP/IP原理有关,很遗憾我知之甚少,
 
提前一下
 
socketsvr.exe 可以设置客户端没有响应自动断开得时间!
不过在Internet上用socketsvr没有试过, 这个东西好像是有些问题!
 
接受答案了.
 
后退
顶部