Delphi DataSnap連接配接逾時設定無效解決方法
目 錄
- Delphi DataSnap連接配接逾時設定無效解決方法
- 該問題修改三個檔案
- 1DataDbxSocketChannelNativepas
- 2IPPeerClientpas
- 3IPPeerAPIpas
解決問題:delphi D10下(XE8\XE7),DataSnap連接配接逾時設定在android中使用無效,導緻不能連接配接伺服器時長時間等待。更新檔包帶源碼及說明。
Datasnap ConnectTimeout android
該問題修改三個檔案:
-
Data.DbxSocketChannelNative.pas
增加390行、399行兩處代碼;(修改後檔案)
-
IPPeerClient.pas
增加114-117代碼行;及對應函數與過程内容;(修改後檔案)
-
IPPeerAPI.pas
增加514-519接口定義 無對應代碼。(修改後檔案)
對應QC: http://qc.embarcadero.com/wc/qcmain.aspx?d=80954
代碼已上傳到csdn下載下傳區:http://download.csdn.net/detail/tanqth/9798195
支援 RAD10.1.1(10.1 UP1),其他版本請參照修改。
-下載下傳後,将檔案放入到您工程目錄内就行,或将他們複制到其他一個統一的目錄,您所有的工程都從這個統一的目錄加載這些檔案。
1、Data.DbxSocketChannelNative.pas
timeout := DbxProperties[TDBXPropertyNames.ConnectTimeout];
if timeout = '' then
ConnectTimeout :=
else
ConnectTimeout := StrToInt(timeout);
//設定網絡連接配接逾時 -- 譚欽
FIdSocket.ConnectTimeout:= ConnectTimeout;
commTimeout := DbxProperties[TDBXPropertyNames.CommunicationTimeout];
if commTimeout = '' then
CommunicationTimeout :=
else
CommunicationTimeout := StrToInt(commTimeout);
//設定網絡讀逾時 -- 譚欽
FIdSocket.ReadTimeout:=CommunicationTimeout;
2、IPPeerClient.pas
//begin 增加設定網絡連接配接(讀取)逾時 2017-3-29 譚欽
function GetConnectTimeout: Integer;
procedure SetConnectTimeout(timeout: Integer);
function GetReadTimeout: Integer;
procedure SetReadTimeout(timeout: Integer);
//End
function TIdTCPClientPeerIP.GetConnectTimeout: Integer;
begin
Result := FTCPClient.ConnectTimeout;
end;
procedure TIdTCPClientPeerIP.SetConnectTimeout(timeout: Integer);
begin
FTCPClient.ConnectTimeout := timeout;
end;
function TIdTCPClientPeerIP.GetReadTimeout: Integer;
begin
Result := FTCPClient.ReadTimeout;
end;
procedure TIdTCPClientPeerIP.SetReadTimeout(timeout: Integer);
begin
FTCPClient.ReadTimeout:=timeout;
end;
3、IPPeerAPI.pas
//begin 增加網絡連接配接(讀取)逾時設定 2017-3-29 譚欽
function GetConnectTimeout: Integer;
procedure SetConnectTimeout(timeout: Integer);
property ConnectTimeout: Integer read GetConnectTimeout write SetConnectTimeout;
function GetReadTimeout: Integer;
procedure SetReadTimeout(timeout: Integer);
property ReadTimeout: Integer read GetReadTimeout write SetReadTimeout;
//end