从C中的TCP缓冲区读取和存储数据

时间:2018-02-08 15:15:41

标签: c tcp

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

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程序员(通常坚持使用字符和整数)。我该怎么做才能确保缓冲区最后没有多余的垃圾?

1 个答案:

答案 0 :(得分:-1)

我错过了难以捉摸的NULL终结符。

pBuffer = malloc(contentLength + 1)

...

pBuffer[contentLength] = '\0';