我在使用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
用winsock的recv。但是現在它只是掛起。我讓聽衆在無限循環中運行,但沒有任何東西可以被接收。
我認爲這是一個C++問題,但它也可能與我通過stunnel推送連接將其封裝在HTTPS中的事實有關。我有一個測試應用程序,使用C#中的某些庫,它可以通過stunnel完美地工作。我很困惑,爲什麼我的循環在初始recv後沒有收到C++分塊數據。
這是有問題的循環......它上面的分塊OK響應後調用...
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