datasnap 2010 心跳包,连接断开处理
来源:互联网 发布:网络测试仪品牌 编辑:程序博客网 时间:2024/05/18 21:40
procedure TMainForm.DSServer1Connect
(DSConnectEventObject: TDSConnectEventObject);
var
// RowIndx: Integer;
InVal: TCP_KeepAlive;
Ret: DWORD;
ClientConnection: TIdTCPConnection;
begin
EnterCriticalSection(CSConnect);
try
// 最大连接数量,验证来访者密码
if (ConnectCount >= 500) or (DSConnectEventObject.ChannelInfo = nil) or
(DSConnectEventObject.ConnectProperties[TDBXPropertyNames.UserName]
<> 'sunstone') or (DSConnectEventObject.ConnectProperties
[TDBXPropertyNames.Password] <> 'mypassword') then
begin
// ClientConnection.Disconnect;
DSConnectEventObject.DbxConnection.Destroy;
Exit;
end
else
begin
// 获取socket连接
ClientConnection := TIdTCPConnection(DSConnectEventObject.ChannelInfo.Id);
// 同IP连接频率控制
// for RowIndx := ShowConnections.RowCount - 1 downto 1 do
// begin
// if AnsiPos(ClientConnection.Socket.Binding.PeerIP + ':',
// ShowConnections.Cells[1, RowIndx]) > 0 then
// begin
// if SecondsBetween(Now,
// StrToDateTimeDef(ShowConnections.Cells[4, RowIndx], Now)) >= 1 then
// begin
// Break;
// end
// else
// begin
// DSConnectEventObject.DbxConnection.Destroy;
// Exit;
// end;
// end;
// end;
// 设置心跳包
Ret := 0;
InVal.OnOff := 1;
InVal.KeepAliveTime := 4000;
InVal.KeepAliveInterval := 1;
if WSAIoctl(ClientConnection.Socket.Binding.Handle,
IOC_IN or IOC_VENDOR or 4, @InVal, sizeof(TCP_KeepAlive),
nil, 0, @Ret, nil, nil) = SOCKET_ERROR then
begin
DSConnectEventObject.DbxConnection.Destroy;
Exit;
end;
// 建立网络异常断开事件
ClientConnection.OnDisconnected := ClientDisconnectEvent;
// 显示来访者信息
inc(ConnectCount);
ConnectInfo.Panels.Items[1].Text := IntToStr(ConnectCount);
if Trim(ShowConnections.Cells[0, 1]) <> '' then
ShowConnections.RowCount := ShowConnections.RowCount + 1;
ShowConnections.Cells[0, ShowConnections.RowCount - 1] := IntToStr
(DSConnectEventObject.ChannelInfo.Id);
ShowConnections.Cells[1, ShowConnections.RowCount - 1] :=
ClientConnection.Socket.Binding.PeerIP + ':' + IntToStr
(ClientConnection.Socket.Binding.PeerPort);
ShowConnections.Cells[2, ShowConnections.RowCount - 1] :=
DSConnectEventObject.ConnectProperties[TDBXPropertyNames.UserName];
ShowConnections.Cells[3, ShowConnections.RowCount - 1] :=
DSConnectEventObject.ConnectProperties[TDBXPropertyNames.Password];
ShowConnections.Cells[4, ShowConnections.RowCount - 1] := FormatDateTime
('yyyy-mm-dd hh:nn:ss', Now);
end;
finally
LeaveCriticalSection(CSConnect);
end;
end;
- datasnap 2010 心跳包,连接断开处理
- delphi datasnap 心跳包
- 给websocket加入心跳包防止自动断开连接
- 关于Delphi XE DataSnap心跳包
- delphi xe2下的datasnap心跳包设置
- 三层Datasnap 服务端验证以及心跳包技术
- 网络心跳包处理
- 网络心跳包处理
- 长连接和心跳包
- 长连接和心跳包 .
- 长连接和心跳包
- Socket 长连接 心跳包
- 长连接和心跳包
- 长连接和心跳包
- 长连接和心跳包
- socket中使用心跳来检测连接是否断开
- TCP连接断开情况处理
- DataSnap-建立稳定服务程序之TCP心跳包的使用
- js访问网址
- WCF Service中HttpContext.Current为null的解决办法
- linux 命令 笔记
- Android+APK反编译
- J2EE中的容器
- datasnap 2010 心跳包,连接断开处理
- response.setHeader 是用来设置返回页面的头 meta 信息
- Linux设备驱动程序 学习笔记
- log4net学习
- 银行业务调度系统
- 小白鼠试毒药问题
- JAVA内部的容器类
- java中log日志的使用2
- 如何更好地发挥日志功能来推进java企业开过程