我試圖在任何基于 Tcomponent 的 VCL 形式的 TCP 資料快照服務器方法中確定客戶端 IP 的來源 - 沒有任何通道(除了客戶端必須發送它)。我還尋找一種方法來參考服務器的連接資訊來檢索客戶端的 IP,但沒有成功。
希望看到程序/功能的作業方式如下:
procedure TServerMethods1.someTask(userId, taskId :integer; data:string);// can be a function
var
ip:string;
begin
ip := (ServerContainer1.TDSServer.GetThreadSession).GetData('RemoteIP');// client IP
// do stuff..
end;
蒂亞..
uj5u.com熱心網友回復:
根據您最初的問題和隨后的評論,這應該可以回答您的問題。
procedure TServerContainer.DSServer1Connect(
DSConnectEventObject: TDSConnectEventObject);
var
user: String;
ClientInfo: TdbxClientInfo;
ipaddy: String;
begin
// note: this procedure gets called immediately AFTER DSAuthenticationManager1UserAuthenticate
user := TDSSessionManager.GetThreadSession.GetData('User');
ClientInfo := DSConnectEventObject.ChannelInfo.ClientInfo;
ipAddy := ClientInfo.IpAddress;
TDSSessionManager.GetThreadSession.PutData('ipaddy', ipAddy);
end;
procedure TServerMethods1.someTask(userId, taskId :integer; data:string);// can be a function
var
ip:string;
begin
ip := TDSSessionManager.GetThreadSession.GetData('ipaddy')
// do stuff..
end;
uj5u.com熱心網友回復:
嘗試使用 TDSSessionManager.GetThreadSession 方法而不是 ServerContainer1.TDSServer.GetThreadSession。
(已編輯)
這是 EchoString 資料快照服務器方法的一個簡單實作。
unit ServerMethodsUnit1;
interface
uses System.SysUtils, System.Classes, Datasnap.DSServer, Datasnap.DSAuth;
type
{$METHODINFO ON}
TServerMethods1 = class(TComponent)
private
public
function EchoString(Value: string): string;
end;
{$METHODINFO OFF}
implementation
uses System.StrUtils, Datasnap.DSSession;
function TServerMethods1.EchoString(Value: string): string;
begin
Result := 'Your IP address is ' TDSSessionManager.GetThreadSession.GetData('RemoteIP') ':' TDSSessionManager.GetThreadSession.GetData('RemotePort');
end;
end.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/503919.html
上一篇:FASTMM4和FASTMM5可以在Android/Ios下作業嗎?
下一篇:確定DateTime編碼或格式
