If you're not reading all of the bytes, then the decompression is never going to work. I (and you also, apparently) have doubts that all of your data is fitting into 1024 bytes.
Where is this data coming from? Did you write the server code? If not, then I don't know that I can help you. If yes, then you probably need to modify the server (and client) to follow some sort of sane protocol.
Typically, a simple way to handle this is to send the length of the message in the first x bytes of the message. You can use 4 bytes (32 bits), or if that's too much or too little, adjust to your liking. Then instead of using recv, you'll have to use read or sysread in a loop until you've got all of your data.
## Warning: Incomplete and untested ##
my $buffer;
my $got_bytes = 0;
while ($got_bytes < $total_bytes) {
my $bytes = sysread $s, $buffer, $total_bytes - $got_bytes, $got_b
+ytes;
}