But I get a 0.
Because it takes time for the data to arrive. You are checking the amount of data that was received as soon as the connection is established. Of course that will be 0. Patience is a virtue. The delay() function is not. Don't go there.
If you know that you are to get 28 bytes, statically allocate an array that size, and populate it in the nested if blocks that are executed when there IS data to read.