请教大家,关于取得https服务器返回数据问题

tiger_qi 2003-12-02 06:17:43

以下代码是从Http服务器取得数据的片断。我不知道为什么取的不对。
本来已经取得一些数据,但是下次取得时候,上次取得的数据又给送过来了。
比如我本次取ABCD,下次按说应该是从D后面开始取,但是为什么偶尔有时候会从
BCD开始取。导致数据不对。

unsigned long bytes =0;
char Buffer[1024] ;
while(1)
{

memset(Buffer,'\0',1024);

InternetReadFile(hRequest,Buffer,1024,&bytes);

if (bytes)
{

retXML.cat_sprintf("%s",Buffer);



}

else
{
break;

}


memset(Buffer,'\0',1024);}

...全文
73 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger_qi 2003-12-04
  • 打赏
  • 举报
回复
如果是后者,我想应该是Buffer指针本身在stack上,所指向的内容在heap上,但是我不明白的是,为什么我用char Buffer[1024]在我的程序中就可以,但是后者就不可以?
ljianq 2003-12-04
  • 打赏
  • 举报
回复
char Buffer[1024]:分配在栈上

char *Buffer = (char *)GlobalAlloc(GPTR,1024):分配在堆上

tiger_qi 2003-12-04
  • 打赏
  • 举报
回复
谁能告诉我在函数中定义
char Buffer[1024]
char *Buffer = (char *)GlobalAlloc(GPTR,1024)

有什么区别马?
tiger_qi 2003-12-04
  • 打赏
  • 举报
回复
另外一个问题

我使用char Buffer[1024] 定义可以,但是我想用动态
char *Buffer = (char *)GlobalAlloc(GPTR,1024)
为什么在我用retXML连接Buffer得到的结果却是未定义的。
retXML为AnsiString
tiger_qi 2003-12-04
  • 打赏
  • 举报
回复
我看了,不错,好好研究。
我的问题也解决了

if (bytes)
{

retXML.cat_sprintf("%s",Buffer);



}

前加入Buffer[bytes]=0x00;



pp616 2003-12-02
  • 打赏
  • 举报
回复
有的服务器不支持InternetSetFilePointer函数。
我这有一个写着玩的多线程下载的例子,中间有些问题没搞定。但是下载还是能正常进行的。你拿去参考一下。
我已经放在web上了。下载地址:
http://www.cnxbb.com/bcb/WinInetDownLoad.rar
tiger_qi 2003-12-02
  • 打赏
  • 举报
回复
想通过 InternetSetFilePointer(hRequest,bytes,NULL,FILE_CURRENT,0);函数设置读取位置,但是调用该函数老是
返回-1不知道为什么?

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧