Ethernet data transfer stalling or failing

It must be receiving characters there. Why don't you take a look?

       while(client.available()) {
         // ...but not until this buffer is empty
         Serial.write(client.read());
         length++;
       }

edit: You might also want to disable the SD SPI interface on your shield. That caused me some grief like that.

void setup()
{
   Serial.begin(9600);
   pinMode(4,OUTPUT);
   digitalWrite(4,HIGH);
   // rest of setup
}