如何设置FtpPutFile 的timeout |
答題得分者是:geniustom
|
cavalier
一般會員 ![]() ![]() 發表:11 回覆:14 積分:5 註冊:2003-12-05 發送簡訊給我 |
|
geniustom
版主 ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
|
geniustom
版主 ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
補充一下..如果您堅持不想使用元件...
還有另一種方法..可以從API中設定TIMEOUT
來源..http://forum.nifty.com/fdelphi/samples/01105.html(小日本的站ㄛ)
procedure SetTimeOut; //TimeOutの設定 var TimeOut: integer; begin TimeOut := 60 * 1000; //単位はmsなんで秒に変換(60秒に設定) InternetSetOption(hSession, INTERNET_OPTION_RECEIVE_TIMEOUT, @TimeOut, SizeOf(TimeOut)); end;GOOD LUCK |
cavalier
一般會員 ![]() ![]() 發表:11 回覆:14 積分:5 註冊:2003-12-05 發送簡訊給我 |
function TNWFtp.UploadFile(sFileName: String; DirName: String): Boolean; var TimeOut: integer; begin result := false; if Active then begin TimeOut := 15 * 1000; InternetSetOption(FFtpHandle, INTERNET_OPTION_RECEIVE_TIMEOUT, @TimeOut, SizeOf(TimeOut)); result := FtpPutFile(FFtpHandle, PChar(sFileName), PChar(ExtractFileName(sFileName)), FTP_TRANSFER_TYPE_BINARY, 0); if result = false then begin HandleInternetGetLastResponseInfo; Exit; end; end; end;好像不起作用哦~ |
geniustom
版主 ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
cavalier您好...
我上兩篇PO的文章..分別是3種方法..不過您怎麼全都湊在一啟用了 < >< >
法1...先PING對方..PING到才連線..(接著才寫FtpPutFile)
法2...使用NMFTP..裡面就已經可以設定TIMEOUT屬性了..(不要使用FtpPutFile這個函數)
法3...從API中設定TIMEOUT..(接著才寫FtpPutFile) 困難度:3>1>2..
如果搞不定..建議您還是選擇第二種..請看下圖..
|
cavalier
一般會員 ![]() ![]() 發表:11 回覆:14 積分:5 註冊:2003-12-05 發送簡訊給我 |
谢谢geniustom的关注
我给出的那段代码是我自己写的一个基于windows api的一个类
现在碰到的问题是:连接到ftp server是没问题的,download文件也没问题;但是,uploade文件是就出现问题,我跟踪了代码,发现
result := FtpPutFile(FFtpHandle, PChar(sFileName), PChar(ExtractFileName(sFileName)), FTP_TRANSFER_TYPE_BINARY, 0);
这个函数长时间不能返回,导致整个程式无法响应,hold住了。
有什么办法在指定的timeout值里,强制FtpPutFile返回呢? 例外,找到这篇文章
BUG: InternetSetOption Does Not Set Timeout Values
http://support.microsoft.com/kb/q176420
里面提到
NOTES: • INTERNET_OPTION_RECEIVE_TIMEOUT no longer works in Internet Explorer 5.0. For more information, see the following article in the Microsoft Knowledge Base:
224318 HOWTO: Control Connection Timeout Value by Creating Second Thread
• The latest version of the Wininet.dll file that shipped with Internet Explorer 5.01 (available for download) fixes all timeout problems for HTTP APIs only. FTP timeouts still cannot be changed. 發表人 - cavalier 於 2004/11/11 11:01:20
|
geniustom
版主 ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
cavalier您好..您說的不錯..之後我有TRACE過..
發現InternetSetOption這個函式的確是無法作用的...
另外..FtpPutFile其實是一個"初階"的API..只能拿來做很陽春的傳送功能..
如果您想要她去控制傳輸檔案的區段..或是有辦法顯示進度..不被HOLD住..
那是不可能的..不過FtpPutFile的最後一個參數可以結合InternetSetStatusCallback..
去做..當有狀態傳回時..可以呼叫您自訂的事件處理..不過當傳輸時..還是一點作用也沒有..
還是會被定住.. 如果要讓程式不會定住..由您自己控制要傳輸的區段...使用FtpOpenFile比較適合..
可參考
|
cavalier
一般會員 ![]() ![]() 發表:11 回覆:14 積分:5 註冊:2003-12-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |