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...


Anmelden zum Antworten