У меня сомнения по этому коду:
If TCPlength>1000:TCPlength=1000:PrintN("Packet error!"):EndIf
Ты проверяешь если длина больше 1000, значит ошибка (типо число в заголовке никогда не больше 1000), но затем продолжаешь читать.
Ты уверен что проблем нету с подсчётом длины пакета?