D
Okay. Nur eine Frage.
Wie kann es sein, dass nur 3 Pakete ankommen, egal welche "Blockgröße" ich vorziehe?
Client (Sender):
DWORD WINAPI sr_sendFile (LPVOID pParam)
{
// Variablen deklarieren
printf ("thread started\n");
cl_funcs cl;
int intFileSize = 0;;
char charFileSize[128];
int bytesSent = 0;
sendFilePart = true;
// Datei öffnen, Länge berechnen
ifstream fileIn ("c:\\LKS.exe", ios::binary);
fileIn.seekg (0, ios::end);
intFileSize = fileIn.tellg ();
fileIn.seekg (0, ios::beg);
itoa (intFileSize, charFileSize, 10);
// Bereitschaftsbefehl senden
cl.sendMessage ("?!", 2);
printf ("go ready sent\n");
Sleep (1000);
cl.sendMessage (charFileSize, strlen (charFileSize));
printf ("size sent ... continue with file\n");
while (!fileIn.eof ())
{
char buffer[MAX_MESSAGE_SIZE];
fileIn.read (buffer, sizeof (buffer));
while (!sendFilePart)
{
Sleep (1);
}
cl.sendMessage (buffer, fileIn.gcount ());
sendFilePart = false;
bytesSent += fileIn.gcount ();
printf ("%i\tbytes sent\n", bytesSent);
//Sleep (100);
}
fileIn.close ();
return 0;
}
Server (Empfänger):
char temp[16384];
int rc;
//cout <<inet_ntoa(from.sin_addr) <<":"<<temp<<"\r\n";
rc = recv (sRecSocket, temp, sizeof (temp), 0);
if (rc > 0)
{
temp[rc] = '\0';
string msg (temp);
for (;;)
{
if (recFileStatus == 0)
{
if (msg == "?!")
{
printf ("?! received\n");
recFileStatus = 1;
}
printf("Client hat folgendes gesandt: %s\n", temp);
break;
}
if (recFileStatus == 1)
{
recFileSize = atoi (temp);
recFileStatus = 2;
printf ("size set to: %i\n", recFileSize);
fileOut.open ("D:\\out.exe", ios::app | ios::binary);
break;
}
if (recFileStatus == 2)
{
fileOut.write (temp, rc);
fileOut.flush ();
recFileReceived += rc;
float percentage = recFileReceived / recFileSize;
printf ("%i\t%i\t%f\n", recFileReceived, recFileSize, percentage);
send(sRecSocket,"np",2,0);
break;
}
}
return 0;
}
Wenn der Server np sendet, dann wird beim Client der Bool sendFilePart auf true gesetzt.