静的なクラスでデータを正常に送信することができます。ソケットプログラミングでは、データの量は少なくて済みますが、実稼働環境ではいつかフリーズしてデータを送信し始めています。問題ですか?助けてもらえますか?コードは以下の通りです。いつかデータがフリーズし、いつかは遅れるようにするためのソケットプログラミング
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