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;

解决方案 »

  1.   

    不好意思,没有看懂你的意图。DataSnap 有自己的一套回收机制。你说的可能与此无关。
    DataSnap TCP的Socket连接,就是一种TCP/IP的连接方式。你说的可能是,客户端登录时机制。
    通常我们要把客户端的计算机名,IPf地址,用户名,密码,上传服务器端。决定是否连接,事实上忆经连接,不然如何辨别用户信息和密码是否正确。确定登录成功,才能读取数据。登录成功的同时,还可回复一个成功的信息。
      

  2.   

    我是想把Socket连接与回叫标识绑定,在同一回叫标识重复登录(密码泄露)时,可以在服务端进行一些控制,如:提示用户密码可能泄露,或者直接在服务端断掉这个客户端
      

  3.   

    Socket连接是不能拒绝的。只在让登录后,看客户端的用户名和密码是否合法,决定是否让它继续(读取数据)。通常判断是否合法:
    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联系起来。