чтение происходит только если новые данные пришли - то есть прошлый буффер, хоть он там и остается, никак не может быть еще раз прочитан, на него хоть один байт, но записывается, и это видно в логах.
еще раз код:
ReceiveNetworkData(TCPclientID, *TCPBuffer,4)
TCPlength.i=PeekL(*TCPBuffer)
;temp.s=PeekS(*TCPBuffer,4)
;PrintN("Packet Length:"+Str(TCPlength)+" "+temp)
;If TCPlength>1000:TCPlength=1000:PrintN("Packet error!"):EndIf
ReceiveNetworkData(TCPclientID, *TCPBuffer,TCPlength)
TCPPacket=PeekS(*TCPBuffer,TCPlength)
;PrintN(TCPPacket)
Я не считал полную длину именно считанных данных, как прелагал Пётр. Но все пришедшие пакеты полностью видны в консольке, соответственно можно посмотреть, где пакет "недочитался", где слишком много, что не пришло.
То что закоменчено, это как раз было логирование пришедших данных. И в случае ошибки в переменной temp было как раз начало следующего пакета, а должна быть по идее длина пакета - integer.