簡體   English   中英

在 C 中從 TCP 緩沖區讀取和存儲數據

[英]Reading and storing data from a TCP buffer in C

我正在從 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 的程序員(通常堅持使用字符和整數)。 我能做些什么來確保緩沖區最后沒有裝滿額外的垃圾?

我錯過了難以捉摸的 NULL 終止符。

pBuffer = malloc(contentLength + 1)

...

pBuffer[contentLength] = '\\0' ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM