Simplified message handling.
Change ping so it doesn't have a timeout and you can send more than 1.
Don't write a send/receive error over another disconnect message.
Delay starting the map until receiving a MOTD, this means you won't quickly connect and disconnect if the username is taken.
Protect UDP messages from null bytes.
Use a warp average variable to avoid "Collection was modified" exception
Protect handshake from byte[0] and null.
Update client receive timestamp on tcp receive too.