首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

linux上用使用CURL接收数据不全,大神们帮忙看看

2012-09-02 
linux下用使用CURL接收数据不全,大神们帮忙看看。C/C++ codechar res_buf[409600 + 1]size_t copy_data(vo

linux下用使用CURL接收数据不全,大神们帮忙看看。

C/C++ code
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这个函数都调用了两次。请大家帮我看看,帮我出出主意吧。万分感谢

[解决办法]
HTML code
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。
[解决办法]
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 
}


[解决办法]
其他不看,单就这一句肯定错,不能假定对端发来的数据是非'\0'字节。

memcpy(res_buf + strlen(res_buf)

热点排行