需要做这样一个服务器,服务器有可能连接500个以上的客户端,并且须对客户端实行下列的操作,如果连接的客户端在30秒内不向服务器端发送数据,服务器端就将此连接的客

  • 主题发起人 主题发起人 yn-923
  • 开始时间 开始时间
Y

yn-923

Unregistered / Unconfirmed
GUEST, unregistred user!
需要做这样一个服务器,服务器有可能连接500个以上的客户端,并且须对客户端实行下列的操作,如果连接的客户端在30秒内不向服务器端发送数据,服务器端就将此连接的客户端断开,如何实现?(18分)<br />需要做一个这样的服务器:
此服务器有可能连接500个以上的客户端,并且须对客户端实行下列的操作,如果连接的客户端在30秒内不向服务器端发送数据,服务器端就将此连接的客户端断开,如何实现?
请各位帮帮忙?急,急,急!
 
最简单的是用Select()模型,对每一个Client连接创建一个数据接收发送线程(要用到多线程),

在线程函数中用如
var
FDRead: TFDSet;
timeout: TTimeVal;//超时

timeout.tv_sec:=30;
timeval.tv_usec:=0;

FDRead.fd_count:=1;
FDRead.fd_array[0]:=ClientSocketHandle;
//Client winsock handle (在 Accept里得到)
while (true) do
begin
iRet:=Select(0, @FDRead, nil, nil, @timeout);
if iRet <= 0 then //--- net error or closed socket
begin
// 超时或网络断开或其它错误;
Break;
end
else
begin
数据接收处理
end;

end;
 
推荐dbanywhere 4
www.hbbonny.com
 
解决了吗?
QQ:67189250
 
500个套接字,使用SELECT就可以了!简单容易实现!
 
SELECT是UNIX的产物,500以上的并发,不用考虑。

用异步+EVENTSELECT就可以了,做好连接并发的处理,做个超时判断就OK了。

要不用重叠 + 完成例程,单CPU下效能高,结构清晰,我经常用它。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3448017
IOCP控件的原创作者,欢迎你加入我们的开源项目中。
 
后退
顶部