首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C语言从TCP缓冲区读取和存储数据

用C语言从TCP缓冲区读取和存储数据
EN

Stack Overflow用户
提问于 2018-02-08 15:15:40
回答 1查看 191关注 0票数 0

我正在从HTTP包装的TCP套接字中读取一些HTTP数据。我的仪器正常工作,但有一种奇怪的综合症。基本上,我知道内容长度是什么(通过header Content-length),但我经常似乎要构建一个比预期长2-3字节的缓冲区。我知道我并没有在初始化时设置缓冲区大小,但是当我设置时,我会得到很多编译错误。下面的代码几乎可以工作,但通常会在缓冲区中产生比应有的数据更多的数据。

代码语言:javascript
复制
long bytesRead;
unsigned long bytesRemaining;
sbyte *pBuffer;
sbyte *pTmpBuffer;

pBuffer = malloc(contentLength);
memset(pBuffer, 0, contentLength);

pTmpBuffer = pBuffer;
bytesRemaining = contentLength;
while(bytesRemaining > 0){
   if(maxBuffSize < bytesRemaining){
      chunkSize = maxBuffSize;
   }
   else {
      chunkSize = bytesRemaining;
   }

   bytesRead = tcpBlockReader(pHttpData, pTempBuff, chunkSize);
   bytesRemaining -= bytesRead;
   pTempBuff += bytesRead;
}

printf("Data is %s\n", pBuffer);
printf("Length is %d\n", strlen(pBuffer));

现在它有时会很完美

Data is expected+data

Length is 13

有时它会

Data is expected+data+(weird characters)

Length is 15

因此,这里的问题是,我没有为缓冲区(即pBuffer[contentLength])设置大小。但是,当我这样做时,我会得到incompatible types的错误以及其他不正确的地方。我不是一个非常精通的C程序员(通常坚持字符和ints)。我能做些什么来确保缓冲区在最后不充满额外的垃圾?

EN

回答 1

Stack Overflow用户

发布于 2018-02-08 15:43:40

我想念那个难以捉摸的空终结者。

pBuffer = malloc(contentLength + 1)

..。

pBuffer[contentLength] = '\0'

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48688799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档