我用CInternetSession写了个程序,但是运行起来就显示没有响应
但是还是在正常运行,请问,这是哪里的问题呀?

解决方案 »

  1.   

    程序如下:
    BOOL CUpdateCheckDlg::CheckUpdate(struct UPDATECONFIG *updateConf){
    CInternetSession  m_cis;
    CHttpConnection *m_pHttp;
    BOOL m_UpdateCheckResult = FALSE;
    DWORD m_dwHttpRequestFlags = HSR_DOWNLOAD | INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT; 
    DWORD dwHttpStatus; CString m_UpdateURL;
    m_UpdateURL.Format("/gzcx/Server?unit_code=%s&update_date=%s",
    updateConf->sUnitCode, updateConf->sLastUpdateDate);

    CString info;
    info.Format("ÕýÔÚÁ¬½ÓÔ¶³Ì·þÎñÆ÷¡­¡­¡¾%s:%d¡¿",updateConf->sServerAddress,updateConf->dServerPort);
    outExecuteInfoLn(info);
    // outExecuteInfoLn(m_UpdateURL);
    try{
    // m_cis = new CInternetSession(NULL, 1, INTERNET_OPEN_TYPE_PRECONFIG);
    m_cis.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5);
    m_pHttp=m_cis.GetHttpConnection(updateConf->sServerAddress,updateConf->dServerPort); if(m_pHttp==NULL)
    {
    outExecuteInfoLn("·þÎñÆ÷Á¬½Óʧ°Ü£¡");
    }else{
    outExecuteInfoLn("·þÎñÆ÷Á¬½Ó³É¹¦£¡");
    CHttpFile *pFile = m_pHttp->OpenRequest(CHttpConnection::HTTP_VERB_GET, 
    m_UpdateURL, NULL, 1, NULL, NULL, m_dwHttpRequestFlags); 
    outExecuteInfo("ÕýÔÚÏò·þÎñÆ÷·¢ËÍÇëÇó¡­¡­");
    if(!pFile->SendRequest())
    {
    outExecuteInfoLn("¡¾Ê§°Ü¡¿");
    pFile->Close();
    }else{
    outExecuteInfoLn("¡¾³É¹¦¡¿");
    if(pFile)
    {
    if (pFile->QueryInfoStatusCode(dwHttpStatus)!=0)
    {  
    if (dwHttpStatus < 400)
    {
    outExecuteInfo("&Otilde;&yacute;&Ocirc;&Uacute;&Iuml;&Acirc;&Ocirc;&Oslash;&cedil;ü&ETH;&Acirc;&Ccedil;&aring;&micro;&yen;&iexcl;&shy;&iexcl;&shy;");
    CStdioFile csf;
    csf.Open(updateConf->sCheckUpFileName,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
    char buf[2048];
    int n;
    while((n=pFile->Read(buf,2048))>0)
    csf.Write(buf,n);
    csf.Close();
    m_UpdateCheckResult = TRUE;
    outExecuteInfoLn("&iexcl;&frac34;&Iuml;&Acirc;&Ocirc;&Oslash;&sup3;&Eacute;&sup1;&brvbar;&iexcl;&iquest;");
    }
    }
    if(!m_UpdateCheckResult)
    {
    outExecuteInfoLn(getStringForHttpstatus(dwHttpStatus));
    }
    pFile->Close();
    }
    }
    m_pHttp->Close();
    }
    m_cis.Close();
    }catch(CInternetException* pEx){
    TCHAR szError[1024];
    pEx->GetErrorMessage(szError,1024);
    AfxMessageBox(szError);
    }catch(...){
    outExecuteInfoLn("·&cent;&Eacute;ú&Ograve;ì&sup3;&pound;&pound;&not;&cedil;ü&ETH;&Acirc;&Ecirc;§°&Uuml;&pound;&iexcl;");
    }
    return m_UpdateCheckResult;
    }
      

  2.   

    把读取文件和取网络的部分放到线程中?
    要怎么弄啊,可否提供一些源代码参考
    由于小弟是刚刚接触VC,是重B/S方式转过来的,对WINDOWS编程不了解,还请各位高手多多指教!
    帮帮小弟!
      

  3.   

    比如在你的类MyInet中实现了读取网络的部分
    public:
       CString m_inetInfo;//用来保存从网络读取的内容
    public:
       UINT readInet();//读取网络的方法,将从网上下载的字符串保存到m_inetInfo中,并在数据下载成功后向需要处理此字符串的类发送消息。该类在接收到消息后开始处理这些数据。//线程启动方法,在要求读取网络的时候只要启动此方法。
    UINT myInetFuc(PVOID p){
       return ((MyInet*)p)->readInet();
    }
    我做网络程序的时候一般是这个思路,取网络是个阻塞的方法,如果放到主线程中就会让界面停滞,所以最好放到副线程中做,在取得数据后再通知主线程对数据进行处理。估计你的问题在这。