我能夠通過套接字編程成功地發送一個靜態類,對於少量數據工作正常,但在生產環境中,它凍結了一段時間,又一次開始發送數據,我無法弄清楚什麼問題是什麼?你能幫忙嗎?代碼如下。在Windows中的套接字編程發送數據凍結了一段時間,並延遲了一段時間?
DWORD BytesCount;
WSABUF Buffer[1];
DWORD Flag = 0;
Buffer[0].len = SendLength;
Buffer[0].buf = SendData;
if (WSASend(*socket, Buffer, 1, &BytesCount, Flag, NULL, NULL) != SOCKET_ERROR)
{
if (BytesCount != SendLength)
Result = -2;
else
{
if (ReturnAnswer)
{
int Res = 0, recBufStart;
DWORD RecvCount = 0, AllRecv = 0;
Buffer[0].len = ReceiveLength;
Buffer[0].buf = ReceiveData;
recBufStart = 0;
saAction = saReceive;
// We need to Receive until we get all the data. When WSARecv call might only return zero bytes
bool Stop = true; // true as we dont need to recieve anything from the server.
while (!Stop)
{
Res = WSARecv(*socket, &Buffer[recBufStart], (recBufStart == 0 ? 1 : 0), &RecvCount, &Flag, NULL, NULL);
if (Res == SOCKET_ERROR)
Stop = true;
else
{
AllRecv = AllRecv + RecvCount;
if (AllRecv == ReceiveLength || RecvCount == 0)
Stop = true; // Stop
else
{
Buffer[0].buf = &ReceiveData[AllRecv];
Buffer[0].len = ReceiveLength - (AllRecv);
recBufStart = 0;
}
}
}
if (Res == SOCKET_ERROR)
Result = WSAGetLastError();
}
}
}
else
Result = WSAGetLastError();
「WSASend」還是「WSARecv」凍結了? –
我正在使用WSASend,至於時間我沒有收到任何東西,你可以看到布爾值設置爲true。 – Ershad