char res_buf[409600 + 1];
size_t copy_data(void *ptr, size_t size, size_t nmemb, void *stream)
{ 
    memcpy(res_buf + strlen(res_buf), ptr, size * nmemb);    
    return strlen(res_buf);
}

    curl = curl_easy_init();
    if (curl) {
    curl_easy_setopt(curl,CURLOPT_URL,des_addr);
    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,copy_data);
    curl_easy_setopt(curl,CURLOPT_WRITEDATA,res_buf);
    curl_easy_setopt(curl,CURLOPT_POST, 1);
    curl_easy_setopt(curl,CURLOPT_VERBOSE,1);
    curl_easy_setopt(curl,CURLOPT_HEADER,0);
    headers =curl_slist_append(headers,"Content-Type: text/html");
    curl_easy_setopt(curl,CURLOPT_HTTPHEADER,headers);
    }
   curl_easy_setopt(curl,CURLOPT_POSTFIELDS,res_data);

我使用tcpdump抓包工具可以抓到对方发给我的完整的包,但是我就后来不会接收完整。我怀疑是那些设置的问题,每次copy_data这个函数都调用了两次。请大家帮我看看,帮我出出主意吧。万分感谢

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础
  • Linux系统管理技术手册(第2版)


1个回答

char res_buf[409600 + 1]; //这个初始化得清0
size_t copy_data(void *ptr, size_t size, size_t nmemb, void *stream)
{  
  memcpy(res_buf + strlen(res_buf), ptr, size * nmemb); //请在结尾加'\0'   
  return strlen(res_buf); //return 的应该是size*nmemb  
}