客戶端以被動模式定期向服務器TIdFtpServer發送數據。 在一臺客戶端機器中,網絡有時會中斷我收到消息:TIdFtpClient - 處理服務器端的特定錯誤
EIdReplyRFCError:文件狀態正常;即將打開數據連接。
接下來的命令還會拋出如下異常: EIdReplyRFCError:請求的操作異常終止:處理中的本地錯誤。
當任何EIdException apperar然後清除插座,如:
if Assigned(FFtp.IOHandler) then
begin
FFtp.IOHandler.InputBuffer.Clear;
FFtp.IOHandler.Close;
end;
FFtp.KillDataChannel;
但是客戶端不能再發送數據,仍然EIdReplyRDCError是投擲,我必須重新啓動服務器FTP。重新啓動後,客戶端重新連接成功並可以發送數據。 在服務器端,我沒有記錄任何未捕獲的異常。
我也試過在服務器端,客戶端殺掉這20分鐘內沒有發送數據:
try
T := FFtpServ.Contexts.LockList;
for I := 0 to T.Count - 1 do
if TIdFtpServerContext(T[I]).Data <> nil then
begin
Cl := TFtpCl(TIdFtpServerContext(T[I]).Data);
Minutes := MinutesBetween(Cl.LastPing, Now);
if Minutes >= 20 then
begin
if(Assigned(TIdFtpServerContext(T[I]).Connection.IOHandler)) then
begin
TIdFtpServerContext(T[I]).Connection.IOHandler.InputBuffer.Clear;
TIdFtpServerContext(T[I]).Connection.IOHandler.Close;
end;
TIdFtpServerContext(T[I]).KillDataChannel;
end;
end;
finally
DM.FFtpServ.Contexts.UnLockList;
end;
但這種做法往往我AccessViolation例外。
任何想法來解決這個問題?
「我必須重新啓動服務器FTP。」 - 爲什麼?你應該重新啓動連接。斷開客戶端並再次連接。 –
此外,「訪問衝突」是什麼意思?它發生在哪一行?何時訪問該行上的哪個對象?是在閱讀還是在寫作時?什麼是給出的錯誤文本?請不要隱藏您的信息。閱讀http://www.catb.org/esr/faqs/smart-questions.html#code - 這是很棒的常見問題解答 –