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;
uj5u.com熱心網友回復:
不好意思,沒有看懂你的意圖。DataSnap 有自己的一套回識訓制。你說的可能與此無關。
DataSnap TCP的Socket連接,就是一種TCP/IP的連接方式。
你說的可能是,客戶端登錄時機制。
通常我們要把客戶端的計算機名,IPf地址,用戶名,密碼,上傳服務器端。決定是否連接,事實上憶經連接,不然如何辨別用戶資訊和密碼是否正確。確定登錄成功,才能讀取資料。登錄成功的同時,還可回復一個成功的資訊。
uj5u.com熱心網友回復:
我是想把Socket連接與回叫標識系結,在同一回叫標識重復登錄(密碼泄露)時,可以在服務端進行一些控制,如:提示用戶密碼可能泄露,或者直接在服務端斷掉這個客戶端
uj5u.com熱心網友回復:
Socket連接是不能拒絕的。只在讓登錄后,看客戶端的用戶名和密碼是否合法,決定是否讓它繼續(讀取資料)。通常判斷是否合法:
1、限定用戶的IP地址;
2、同一用戶,不能重復登錄;
3、償試登錄次數,不能超過次數。
你的問題,應該是服務器對客戶端的判斷處理。
uj5u.com熱心網友回復:
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聯系起來。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/91748.html
標籤:網絡通信/分布式開發
上一篇:delphi7 中如何把 DBGrid 中資料一條一條分別保存到 excel 檔案
下一篇:在64位系統上部署BDE的要點
