сокеты tcp - это просто байтовые потоки, границы сообщения нет, вам нужно посчитать количество использованных байтов и сравнить это число с числом из преамбулы.
Вот фрагмент кода, который делает то, что вам нужно.он написан на CoffeeScript и использует 32-битный тип int для размера сообщения, поэтому вам придется немного его настроить.
remaining = 0
input = undefined
msgsize = 0
msbuf = new Buffer 4
msneeded = 4
sock.on 'data', (bytes) =>
start = 0
end = bytes.length
while start < bytes.length
if remaining == 0
msavail = (Math.min 4, bytes.length - start)
bytes.copy msbuf, msbuf.length - msneeded, start, start + msavail
msneeded -= msavail
continue if msneeded > 0
msneeded = 4
remaining = msgsize = msbuf.readUInt32LE 0
start += 4
input = new Buffer msgsize
end = (Math.min start + remaining, bytes.length)
bytes.copy input, msgsize - remaining, start, end
remaining -= (end - start)
start = end
@emit 'data', input if 0 == remaining