我能够通过套接字编程成功地发送一个静态类,对于少量数据工作正常,但在生产环境中,它冻结了一段时间,又一次开始发送数据,我无法弄清楚什么问题是什么?你能帮忙吗?代码如下。在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