none
CHttpFile多线程下载出现ERROR 12006,如何解决? RRS feed

  • 问题

  • 经过查询,12006错误是指定URL的协议部分错误,非"http"和"https",但是我的12006错误是在CHttpFile.Read的循环过程中弹出的,请问这是为什么?如何解决这个问题?

          try
            {
                dwReaded = hFile->Read(buf, DEFAULT_BUFSIZE);
                if(dwReaded == 0)
                {
                    break;
                }
            }
            catch (...)
            {
                continue;
            }

    像这样,外面有while(TRUE)循环,我在下载大文件测试的时候,偶尔会出现卡住的情况,TRACK后发现,CONSOLE里出现了12006的错误信息,而且我的工作线程(这个while循环)退出了.在此期间我并没有重新向服务器发送独立request,一直是维持一个request(每个线程一个,在开始的时候被send)去read数据.所有线程经测试在开始部分都read正确,不知道什么时候出现了这个问题...

    求大神指导

    2013年10月25日 6:43

答案

  • 你好,

    正如你所得到的12006错误提示的解释,你是否在建立CHttpFile指针的时候,传入的URL参数没有写"http:" "https:"?

    例如:

    你是否写成了类似这样的代码:

          CInternetSession session("HttpClient");   
           char * url = "www.baidu.com";   
           CHttpFile* pfile = (CHttpFile *)session.OpenURL(url);

    应该是这样的:

           CInternetSession session("HttpClient");   
           char * url = "http://www.baidu.com";   
           CHttpFile* pfile = (CHttpFile *)session.OpenURL(url);

    如果你检查后不是以上原因,请你用代码说明一下你是如何建立hFile 的?你的buffer是如何建立和初始化的?你用的VS是什么版本? CInternetFile::Read 方法会抛出 CInternetException* 异常你也许可以捕获一下该异常,进一步查看原因。

    以下链接中有一些sample code,希望你参考一下,也许能发现自己代码的缺陷。

    http://msdn.microsoft.com/en-us/library/sb35xf67(v=vs.90).aspx

    期待你的反馈,谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月28日 8:13