What the compiler is pointing out is that std::mem::transmute() takes 2 generic type parameters.
Your code is trying to use std::mem::size_of() as a type argument, which can never work, as fns return values, not types.
In addition to that, trying to transmute a byte array into a type seems like one of those things that could easily lead to UB. I for one don't know this is sound, and if I saw this in a code base I would regard it as fairly sus code.
Be aware that stream.read() may well return with less than the number of bytes than would fill your data buffer. Which is why it returns the number of bytes actually read. Your code would produce surprisingly wrong results if the buffer were not filled by read(). Use stream.read_exact() to be sure the buffer is filled.
I too would be wary of transmuting bytes into a structure. What if the machine you are running stores the bytes of integers in the reverse order? Endianness - Wikipedia
Better to parse your bytes into the required integers and whatever and put those into your struct. I'm sure there is are creates out there to help with such deserialisation.
By the way, what is with all m_ ? Is this necessary given that it is always preceded by message. when used?