public Packet ReadPacket(int TimeoutMS = 500)
{
Stopwatch w = new Stopwatch();
while (!_stream.DataAvailable)
if (w.ElapsedMilliseconds > TimeoutMS)
return null;
w.Stop();
short s = _reader.ReadInt16();
MemoryStream mem = new MemoryStream(_reader.ReadBytes(s));
Packet r = Core.Deserialize<Packet>(mem);
r._lastReceiveTime = DateTime.Now.Ticks;
r._receivedOn = this;
return r;
}