Wysylanie okolo 6500000 bajtow blad 10053

0

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);
	}
}

0

Akurat jestem na internet explorer i ta przegladarka jest taka chu****, ze co chwile mi wysyla posta bez mojej decyzji.

Wiec tutaj kontynuacja mojego posta:

(TEN KOD DO WYSYLANIA PAKIETU (KLIENTA) JEST ZLY, wiec wkleje nowy)


void Protocol::SendToServer(Packet* packet)
{
      UINT32 sentBytes = 0;

      while(sentBytes != packet->getLength())
     {
           sentBytes += send(client->clientSocket,(char*)(packet->buffer+sentBytes),,packet->getLength()-sentBytes,0);
      }
}

Co moze byc nie tak?

Z gory dziekuje za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1