recv C代码套接字中的奇怪数据

时间:2014-04-08 04:41:42

标签: c sockets recv

我很困惑,因为我的GET请求代码正在运行,但它给了我一些额外的数据。

recv函数获得了一些罕见的字节。

以下是代码:

send(Socket, request, strlen(request), 0);
    char *ptr = (char*)calloc(sizeof(char), RECV_LENGTH);
    char *ptr2 = NULL;
    size_t len_resp_total = 0;
    int nDataLength;
    int i = 0;
    while ((nDataLength = recv(Socket, ptr, RECV_LENGTH, 0)) > 0){
        printf("\n%s\n", ptr);
        if (i > 0){ //prepare in case that the response is bigger than RECV_LENGTH bytes
            len_resp_total += nDataLength;
            printf("%p apunta a %d len total: %d e i vale: %d\n", ptr2, *ptr2, len_resp_total, i);
            system("pause");
            ptr2 = (char*)realloc(ptr2, len_resp_total+1);
            if (ptr2==NULL){
                printf("Some error reallocating memory\n");
                return ERROR;
            }
            else{
                memcpy(ptr2 + len_resp_total - nDataLength, ptr, nDataLength);
                ptr2[len_resp_total] = '\0';
                i++;
            }   
        }
        else{
            len_resp_total += nDataLength;
            ptr2 = (char*)realloc(ptr2, len_resp_total);
            memcpy(ptr2, ptr, nDataLength);
            ptr2[len_resp_total] = '\0';
            i++;
        }
    }

我正在向此网站发送GET请求:http://pastebin.com/raw.php?i=8Lq1aKGn

在这里,我粘贴了我得到的回复:http://pastebin.com/RuhxKtXi。如你所见,第14,50和69行有一个奇怪的值。

那是什么?

1 个答案:

答案 0 :(得分:4)

在pastebin中查看" Transfer-Encoding:chunked",这意味着内容以chucks传输。行14 50和69上的比特是每个块长度的十六进制值。每个块都是该长度,加上2个字符(\ r \ n)。每个大小都以十六进制表示,后跟\ r \ n。

这意味着有1e0d字节,然后是ed5字节,然后是0字节。

1e0d\r\n
[1e0d bytes of content here]\r\n
ed5\r\n
[ed5 bytes of content here]\r\n
0\r\n
[no content here]\r\n

请参阅:http://en.wikipedia.org/wiki/Chunked_transfer_encoding