winsock을 사용하여 청크 분할 된 HTTP 응답 데이터를 읽는 데 문제가 있습니다. 나는 요청 벌금을 보내고 다시 다음을 얻을 :Winsock으로 청크 HTTP 데이터 수신
HTTP/1.1 200 OK
Server: LMAX/1.0
Content-Type: text/xml; charset=utf-8
Transfer-Encoding: chunked
Date: Mon, 29 Aug 2011 16:22:19 GMT
윈속 RECV를 사용하여. 그러나이 시점에서 그것은 단지 매달린다. 나는 리스너를 무한 루프에서 실행시키지 만, 아무것도 포착하지 않는다.
나는 그것이 C++ 문제라고 생각하지만, HTTPS 내부에서 연결을 stunnel을 통해 연결한다는 사실과 관련 될 수도 있습니다. Stunnel을 통해 완벽하게 작동하는 C#의 일부 라이브러리를 사용하는 테스트 응용 프로그램이 있습니다. 나는 왜 내 루프가 초기 recv 후에 C++ 청크 데이터를받지 못하는지 혼란 스럽다.
이
은 ... 그것은while(true)
{
recvBuf= (char*)calloc(DEFAULT_BUFLEN, sizeof(char));
iRes = recv(ConnectSocket, recvBuf, DEFAULT_BUFLEN, 0);
cout << WSAGetLastError() << endl;
cout << "Recv: " << recvBuf << endl;
if (iRes==SOCKET_ERROR)
{
cout << recvBuf << endl;
err = WSAGetLastError();
wprintf(L"WSARecv failed with error: %d\n", err);
break;
}
}
어떤 아이디어 ... 위의 청크 확인 응답 후 문제의 루프라고한다?
루프에서 할당하지 않도록 코드를 변경하고, 그렇지 않으면 한 번에 DEFAULT_BUFLEN 한 개씩 메모리가 누출됩니다. 또한 루프의 정지 조건은 무엇입니까? 이 'recv'에 도달하기 전에 데이터를 소비하고있을 가능성이 있습니까? – Hasturkun
그래, 그게 기억을 새기고 있다는 것을 나는 이해하지만 나는 지금 당황하고있어. 쉽게 memset으로 전환 할 수 있습니다. 데이터가 도착하지 않는다는 것을 나타내는 모든 수신 후 인쇄를 수행합니다. –
실수로 데이터를 소비하는지 확인하려면이 비트 앞에 코드를 게시하는 것이 좋습니다. 또한'recv'가 오류를 반환하면'recvBuf'가 수정되지 않으므로 인쇄는 무의미합니다. – Hasturkun