У меня есть сервер, который отправляет данные кодирования передачи по частям. Я использую InternetReadFile для чтения данных, но InternetReadFile завершается с ошибкой 12004 после чтения первого фрагмента. Я использовал скрипач (Wireshark) для перехвата полученных данных. Wireshark отображает второй фрагмент, но InternetReadFile API не работает.
Образец кода :
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 ОК
Передача-кодирование: по частям
Дата: Чт, 18 сентября 2014 г., 14:16:16 по Гринвичу
Сервер: ЧНД
3
Ok\n
3
CMD
Клиент читает только первые 3 байта блока. Когда я пытаюсь прочитать следующий 3-байтовый фрагмент «CMD», он не работает.
Пожалуйста, помогите с тем, какие необходимые изменения должен сделать клиент? или сервер должен обрабатывать что-то дополнительное?
dwBytesRead == 10
плохо дляrecv[dwBytesRead] = '\0';
, когда массив имеет ширину всего 10 элементов (и, следовательно, индексируется только от 0..9). - person WhozCraig   schedule 19.09.2014