我有一個發送分塊傳輸編碼數據的服務器。我使用InternetReadFile讀取數據,但在讀取第一個塊後,InternetReadFile將以12004失敗。我用一個提琴手(Wireshark)來攔截收到的數據。 Wireshark顯示第二個塊,但InternetReadFile API失敗。InternetReadFile對分塊響應失敗
示例代碼:
CString totalbuffer ;
While (1)
{
char recv [ 10 ] = '\0' ;
DWORD dwBytesRead = 0 ;
if (InternetReadFile (httpSocket.hReq , recv, 10 , &dwBytesRead))
{
recv[ dwBytesRead] = '\0' ;
totalbuffer += recv ;
printf (" received buffer : %s" , recv) ;
return 1 ;
}
else
{
printf (" InternetReadFile failed with : %d" , GetLastError ()) ;
return 0 ;
}
};
是Wireshark顯示:
HTTP/1.1 200 OK
傳輸編碼:分塊
日期:星期四,2014年9月18日14時16分: 16 GMT
服務器:CHND
確定\ n
CMD
客戶端僅讀取前3個字節的塊。當我嘗試讀取下一個3字節塊「CMD」時,它不起作用。
請問客戶端應該做什麼必要的修改?或者服務器端需要處理額外的東西?
相關:你知道你正在閱讀,如果完全填充該緩衝區前10個字節,行後立即將調用*不確定的行爲*通過一個元素超出你的數組的大小。 (即''dwBytesRead == 10'對於recv [dwBytesRead] ='\ 0'是不好的;'當數組只有10個元素寬時(因此只能從0..9索引)。 – WhozCraig 2014-09-19 08:46:36