我的S端是C端用来验证的,所以clientsocket连一次就断开了,不会超过5-10秒,但是有人恶意连接我,一下高达几百个连接,并且持续几小时。请教,S端如何做个监视,就是监视所有C端的连接,只要超过10秒,S端就将其断开。来个源码,谢谢
解决方案 »
- AddObject 问题
- indy10.5.5使用IdTCPServer接收中文消息显示乱码,请帮忙
- delphi写的一个com组件在C#中调用方法失败
- 用同一个ADOStoredProc打开不同存储过程问题
- 如何使(基类窗体)上的控件显示(派生类窗体)上 注:在编辑界面时
- 集思广益,寻求货币数据格式化问题最优解决方案!
- 开发过控制短信终端(siemens TC35)发送短信的进(或使用过SPCOMM的)
- 如何建立一个access数据库。
- 有关opendialog
- delphi中Number型字段如何转化成Real或Float型数据?
- DELPHI中发现一个很怪异的问题
- 关于数据表格的计算输出问题
type
client_record=record
CHandle: integer; //客户端套接字句柄
CSocket:TCustomWinSocket; //客户端套接字
CName:string; //客户端计算机名称
CAddress:string; //客户端计算机IP地址
CUsed: boolean; //客户端联机标志
CTime: TDatetime; // 客户端连接时间
end;
定义全局变量
session: array[0..99] of client_record; //客户端连接数组
Sessions: integer; //客户端连接数procedure TForm1.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var
i,j:integer;
begin
j:=-1;
for i:=0 to sessions-1 do
begin
//在原有的客户端连接数组中有中断的客户端连接
if not session[i].CUsed then
begin
session[i].CHandle := Socket.SocketHandle ;//客户端套接字句柄
session[i].CSocket := Socket; //客户端套接字
session[i].CName := Socket.RemoteHost ; //客户端计算机名称
session[i].CAddress := Socket.RemoteAddress ;//客户端计算机IP
session[i].CUsed := True; //连接数组当前位置已经占用
session[i].CTime := now; //连接时间
Break;
end;
j := i;
end;
if j=sessions-1 then
begin
inc(sessions);
session[j+1].CHandle := Socket.SocketHandle ;
session[j+1].CSocket := Socket;
session[j+1].CName := Socket.RemoteHost ;
session[j+1].CAddress := Socket.RemoteAddress ;
session[j+1].CUsed := True;
session[i].CTime := now; //连接时间
end;
end;//Timer1的interval定义为15秒
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
Present: TDateTime;
Hour1,Min1, Sec1, MSec1: Word;
Hour2,Min2, Sec2, MSec2: Word;
S:word;
begin
Timer1.Enabled := false;
Present := now;
for i:=0 to sessions-1 do
begin
DecodeTime(Present, Hour1, Min1, Sec1, MSec1);
DecodeTime(session[i].CTime, Hour2, Min2, Sec2, MSec2);
if Min1>Min2 then
S := Sec1+60-Sec2
else if Min1=Min2 then
S := Sec1-Sec2
else
begin
ShowMessage('出错');
exit;
end; if S>10 then
session[i].CSocket.Disconnect(0);
end;
Timer1.Enabled := true;
end;