DataSnap中能将客户端的Socket连接与回叫标识绑定吗?
客户端注册回叫标识(客户端似乎不能取自己的Socket连接): DSClientCallbackChannelManager1.ManagerId := ClientId;
DSClientCallbackChannelManager1.RegisterCallback(CallbackId,
TDataSnapCallBack.Create);
服务端取客户端的Socket连接:procedure TServerContainer1.DSServer1Connect(
DSConnectEventObject: TDSConnectEventObject);
begin
DSConnectEventObject.ChannelInfo.ClientInfo.IpAddress;
DSConnectEventObject.DbxConnection.Destroy;
end;
客户端注册回叫标识(客户端似乎不能取自己的Socket连接): DSClientCallbackChannelManager1.ManagerId := ClientId;
DSClientCallbackChannelManager1.RegisterCallback(CallbackId,
TDataSnapCallBack.Create);
服务端取客户端的Socket连接:procedure TServerContainer1.DSServer1Connect(
DSConnectEventObject: TDSConnectEventObject);
begin
DSConnectEventObject.ChannelInfo.ClientInfo.IpAddress;
DSConnectEventObject.DbxConnection.Destroy;
end;
DataSnap TCP的Socket连接,就是一种TCP/IP的连接方式。你说的可能是,客户端登录时机制。
通常我们要把客户端的计算机名,IPf地址,用户名,密码,上传服务器端。决定是否连接,事实上忆经连接,不然如何辨别用户信息和密码是否正确。确定登录成功,才能读取数据。登录成功的同时,还可回复一个成功的信息。
1、限定用户的IP地址;
2、同一用户,不能重复登录;
3、偿试登录次数,不能超过次数。你的问题,应该是服务器对客户端的判断处理。
procedure TServerContainer1.DSServer1Connect(
DSConnectEventObject: TDSConnectEventObject);
begin
DSConnectEventObject.ChannelInfo.ClientInfo.IpAddress;
DSConnectEventObject.DbxConnection.Destroy;
end;上面的代码就是服务端拒绝客户端连接,用于限制最大连接数时使用现在想在服务端根据ClientId和CallbackId进行相应的处理,并不限于IP
如:
一、相同的ClientId重复登录,提示密码泄露;
二、相同的ClientId重复登录,直接拒绝(DbxConnection.Destroy)
三、连接数达到200或设定的某值后,只有VIP ClientId可以连接,其它的直接拒绝(DbxConnection.Destroy)
以及更多其它情况
这就需要将ClientId、CallbackId和实际的DbxConnection联系起来。