客户端注册回叫标识(客户端似乎不能取自己的Socket连接):
DSClientCallbackChannelManager1.ManagerId := ClientId;
DSClientCallbackChannelManager1.RegisterCallback(CallbackId,
TDataSnapCallBack.Create);
服务端取客户端的Socket连接:
procedure TServerContainer1.DSServer1Connect(
DSConnectEventObject: TDSConnectEventObject);
begin
DSConnectEventObject.ChannelInfo.ClientInfo.IpAddress;
DSConnectEventObject.DbxConnection.Destroy;
end;
4 个解决方案
#1
不好意思,没有看懂你的意图。
DataSnap 有自己的一套回收机制。你说的可能与此无关。
DataSnap TCP的Socket连接,就是一种TCP/IP的连接方式。
你说的可能是,客户端登录时机制。
通常我们要把客户端的计算机名,IPf地址,用户名,密码,上传服务器端。决定是否连接,事实上忆经连接,不然如何辨别用户信息和密码是否正确。确定登录成功,才能读取数据。登录成功的同时,还可回复一个成功的信息。
DataSnap 有自己的一套回收机制。你说的可能与此无关。
DataSnap TCP的Socket连接,就是一种TCP/IP的连接方式。
你说的可能是,客户端登录时机制。
通常我们要把客户端的计算机名,IPf地址,用户名,密码,上传服务器端。决定是否连接,事实上忆经连接,不然如何辨别用户信息和密码是否正确。确定登录成功,才能读取数据。登录成功的同时,还可回复一个成功的信息。
#2
我是想把Socket连接与回叫标识绑定,在同一回叫标识重复登录(密码泄露)时,可以在服务端进行一些控制,如:提示用户密码可能泄露,或者直接在服务端断掉这个客户端
#3
Socket连接是不能拒绝的。只在让登录后,看客户端的用户名和密码是否合法,决定是否让它继续(读取数据)。
通常判断是否合法:
1、限定用户的IP地址;
2、同一用户,不能重复登录;
3、偿试登录次数,不能超过次数。
你的问题,应该是服务器对客户端的判断处理。
通常判断是否合法:
1、限定用户的IP地址;
2、同一用户,不能重复登录;
3、偿试登录次数,不能超过次数。
你的问题,应该是服务器对客户端的判断处理。
#4
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联系起来。
#1
不好意思,没有看懂你的意图。
DataSnap 有自己的一套回收机制。你说的可能与此无关。
DataSnap TCP的Socket连接,就是一种TCP/IP的连接方式。
你说的可能是,客户端登录时机制。
通常我们要把客户端的计算机名,IPf地址,用户名,密码,上传服务器端。决定是否连接,事实上忆经连接,不然如何辨别用户信息和密码是否正确。确定登录成功,才能读取数据。登录成功的同时,还可回复一个成功的信息。
DataSnap 有自己的一套回收机制。你说的可能与此无关。
DataSnap TCP的Socket连接,就是一种TCP/IP的连接方式。
你说的可能是,客户端登录时机制。
通常我们要把客户端的计算机名,IPf地址,用户名,密码,上传服务器端。决定是否连接,事实上忆经连接,不然如何辨别用户信息和密码是否正确。确定登录成功,才能读取数据。登录成功的同时,还可回复一个成功的信息。
#2
我是想把Socket连接与回叫标识绑定,在同一回叫标识重复登录(密码泄露)时,可以在服务端进行一些控制,如:提示用户密码可能泄露,或者直接在服务端断掉这个客户端
#3
Socket连接是不能拒绝的。只在让登录后,看客户端的用户名和密码是否合法,决定是否让它继续(读取数据)。
通常判断是否合法:
1、限定用户的IP地址;
2、同一用户,不能重复登录;
3、偿试登录次数,不能超过次数。
你的问题,应该是服务器对客户端的判断处理。
通常判断是否合法:
1、限定用户的IP地址;
2、同一用户,不能重复登录;
3、偿试登录次数,不能超过次数。
你的问题,应该是服务器对客户端的判断处理。
#4
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联系起来。