I think this line is the problem:
int receivedBytesLen = clientSock.Receive(clientData);
In that I think you are expecting to receive the whole data sent in this single call. It doesn't work like that (I've been caught out myself with this). This will return the data in chunks as it is received thus what you need to do is call this repeatedly in a loop each time copying what's read accumulatively into a buffer until the correct number of bytes have been received or (from memory) it returns 0 as the number of bytes read.
Hope that makes sense - will clarify if need be.