socket buffering problem
-
hi,
also ich wollte ein programm schreiben mit dem ich den upload speed messen kann, nur geht das ganze viel zu schnell - die mehtode wartet nicht bis die daten angekommen sind.
ich kann keinen fehler entdecken ich hoffe ihr könnt mir weiter helfen#define SEND_SIZE 65535 [...] unsigned long nSize = 1024 * 1024 * 1; [...] printf( "start sending...\n" ); char szBuffer[ SEND_SIZE ] = { 127 }; unsigned long nPos = 0; unsigned long nStartTime = GetTickCount(); while( nPos < nSize ) { // send size unsigned int nLen; if( nSize - nPos < sizeof( szBuffer ) ) nLen = nSize - nPos; else nLen = sizeof( szBuffer ); // send int nSent; if( strProtocols[ nProtocol ].nSockType == SOCK_STREAM ) nSent = send( sSocket, szBuffer, nLen, 0 ); else nSent = sendto( sSocket, szBuffer, nLen, 0, (sockaddr*)&strTargetAddr, sizeof( strTargetAddr ) ); // error? if( nSent == SOCKET_ERROR ) { printf( "couldn't send data: %i\n", WSAGetLastError() ); break; } else nPos += nSent; } unsigned long nNeededTime = GetTickCount() - nStartTime; // time status float nSeconds = (float)nNeededTime / 1000.0f; printf( "sent %i byte(s) in %f second(s) = %f kb/s\n", nPos, nSeconds, ( (float)nPos / 1024.0f ) / nSeconds );
-
wieso sollte sie? die daten werden ins netz gesendet und können sonst wo gebuffert rumliegen
du müßtest dir eine antwort schicken damit du weißt dass alles angekommen ist und um die pingzeit zu kompensieren einmal pingen und die zeit von der übertragungszeit abziehen.
rapso->greets();
-
hmm, naja wo die liegen ist mir egal
nur es geht halt darum, wass ich nur eine "normale dsl" 16 kb/s up verbindungen hab. wenn ich jetzt daten mit dem code verschicke, werden die daten viel schneller als mit 16 kb/s verschickt. der aufruf von "send" braucht nicht so lange, wie das betriebssystem eingentlich brauchen sollte um die daten zu verschicken - die werden irgendwo zwischengespeichert. deshalb ist die berechnet geschwindigkeit viel zu hoch...