Witam.
Mam 2 aplikacje (klient i server)
Jak wysylam male pakiety to wszystko jest ok.
Problem jest wtedy jak proboje wyslac pakiet ktory zajmuje wiecej ( np zrzut ekranu ktory ma 3 mb ).
Wtedy przy odbieraniu tego pakietu 3 mb (69 000 00 ok. bajtow) odbieranie sie przerywa przy ok 59 000 00, czasami 63 000 00. I WSAGetLastError zwraca 10 053.
Kod servera ( odbieranie pakietu)
void Server::Thread(Server* thisServer)
{
BYTE* buffer = new BYTE[1 * 1024 * 1024 * 6];
while(true)
{
if(!thisServer->clientSocket)
{
thisServer->clientSocket = accept(thisServer->serverSocket,NULL,0);
if(thisServer->clientSocket && (thisServer->clientSocket!=INVALID_SOCKET))
{
ONCONNECT onClientConnectFunction = (ONCONNECT)thisServer->onClientConnectFunction;
onClientConnectFunction();
UINT32 recvBytes = 0;
while(((recvBytes = recv(thisServer->clientSocket,(char*)buffer,4,0)) > 0) && thisServer->clientSocket)
{
UINT32 packetLength = (buffer[0] | buffer[1] << 8 | buffer[2] << 16 | buffer[3] << 24) + 4;
UINT32 dataLength = (buffer[0] | buffer[1] << 8 | buffer[2] << 16 | buffer[3] << 24);
while(recvBytes != packetLength)
{
int recvNow = recv(thisServer->clientSocket,(char*)(buffer+recvBytes),packetLength-recvBytes,0);
if(recvNow > 0)
recvBytes += recvNow;
}
ONRECV onRecvFunction = (ONRECV)thisServer->onRecvFunction;
onRecvFunction(buffer);
thisServer->packetReceived++;
Sleep(1);
}
thisServer->Reset();
thisServer->CloseClient();
ONCLOSE onClientDisconnectFunction = (ONCLOSE)thisServer->onClientDisconnectFunction;
onClientDisconnectFunction();
}
}
Sleep(25);
}
if(buffer)
delete[] buffer;
}
Kod wysylania pakietu (klient)
void Protocol::SendToServer(Packet* packet)
{
UINT32 sentBytes = 0;
while(sentBytes != packet->getLength())
{
sentBytes += send(client->clientSocket,(char*)(packet->buffer+sentBytes),min(16787,packet->getLength()-sentBytes),MSG_DONTROUTE);
}
}