string CDanDanSourceData::GetPCDanDanSourceData(string strURL)
{
CInternetSession session;
CHttpFile *file = NULL;
//string strNewURL = strURL+strAddURL;
CString cstrURL = CGlobalOpt::CharToWchar(strURL.c_str());
string strValue;
CString cstrValue;
char szBuff[2048];
//INTERNET_PROXY_INFO proxyinfo;
//proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
//proxyinfo.lpszProxy ="211.104.243.73:8080";
//proxyinfo.lpszProxyBypass = NULL;
//session.SetOption(INTERNET_OPTION_PROXY,(LPVOID)&proxyinfo,
// sizeof(INTERNET_PROXY_INFO));
session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 500); // 5秒的連接超時
session.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 500); // 1秒的發送超時
session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 500); // 7秒的接收超時
session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 500); // 1秒的發送超時
session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 500); // 7秒的接收超時
//session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1); // 1次重試
try{
file = (CHttpFile*)session.OpenURL(cstrURL,1,
INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE);
}catch(CInternetException * m_pException){
file = NULL;
m_pException->m_dwError;
m_pException->Delete();
session.Close();
LOGERROR("CInternetException");
//MessageBox("CInternetException");
return "";
}
//CString strLine;
if(file != NULL)
{
while(file->ReadString((LPTSTR)szBuff , sizeof(szBuff)/2-2) != NULL)
{
strValue += szBuff;
}
}
else
{
LOGERROR("fail");
return "";
}
file->Close();
session.Close();
return strValue;
}
==
我的程式運行一段時間會彈出“操作超時”的錯誤,我懷疑是這個函式的session.OpenURL函式報的,如果是這個函式報的,有辦法不讓它彈出來?
uj5u.com熱心網友回復:
CInternetSession::OpenURL()This method can throw exceptions of type CInternetException*.
uj5u.com熱心網友回復:
我已經捕捉這個例外了,怎么還有提示框呢?怎么解決
uj5u.com熱心網友回復:
捕捉到例外后
//e->ReportError();//不要這個試試
e->Delete();
uj5u.com熱心網友回復:
那我先試試
uj5u.com熱心網友回復:
我沒這個
uj5u.com熱心網友回復:
你是說捕捉到例外后,呼叫e->Delete()這個?
uj5u.com熱心網友回復:
注釋掉LOGERROR("CInternetException");看看uj5u.com熱心網友回復:
操作超時,是不是系統提示的?而不是你程式提示的。不知道樓主是不是這個問題CInternetSession的OpenURL,如果網路是不通的話,就會在這里卡住的,這樣界面就會卡死10多秒
session.SetOption樓主通過這個設定超時,你以為真的有用嗎?我試過就沒有用,還是卡個10多秒
uj5u.com熱心網友回復:
不可能是系統提示的
uj5u.com熱心網友回復:
跟這個沒關系吧,這個錯誤LOG是我自己列印的
uj5u.com熱心網友回復:
我呼叫的就是delete
uj5u.com熱心網友回復:
那就是這幾行的超時結果了session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 500); // 5秒的連接超時
session.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 500); // 1秒的發送超時
session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 500); // 7秒的接收超時
session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 500); // 1秒的發送超時
session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 500); // 7秒的接收超時
uj5u.com熱心網友回復:
難道我要把這幾行都注釋掉
uj5u.com熱心網友回復:
不清楚,沒有怎么用過CInternetSession,猜測而已
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/129749.html
標籤:網絡編程
上一篇:CSliderCtrl相關重繪
下一篇:誰有可縮放的波形控制元件的例子
