Daten blockweise per SOCKETS senden



  • unsigned long long length;
    	char * buffer;
    	std::ifstream is;
    	is.open (s, std::ios::binary);
    
    	// get length of file:
    	is.seekg (0, std::ios::end);
    	length = is.tellg();
    	is.seekg (0, std::ios::beg);
    
    	// allocate memory:
    	buffer = new char [length];
    	//double len = length;
    	// read data as a block:
    	is.read (buffer,length);
    	is.close();
    

    Ich habe hier eine Funktion, mit der ich eine Datei binär einlese. Nun habe ich das Problem, dass diese Funktion ab einer bestimmten Größe einer Datei streikt. Ich nehme an, dass man einfach nicht mehr genug Speicher per dyn. Array reservieren kann. Wie könnte man die Daten so lesen, dass er immer einen Block nach den anderen einliest?



  • HELPVISTAWIN7 schrieb:

    Wie könnte man die Daten so lesen, dass er immer einen Block nach den anderen einliest?

    Einen kleineren Puffer verwenden und mehrmals read aufrufen?



  • #define BUF_SIZ 4096
    
    int retval = 0;
    char buffer[BUF_SIZ];
    FILE *file = fopen( "file.txt", "rb" );
    
    while( !feof( file ) )
    {
      retval = fread( buffer, 1, BUF_SIZ, lFile );
      send( socket, buffer, retval, 0 )
    }
    

    Kannste dir auch in C++ bauen 😃


Log in to reply