http://www.emoticode.net/c-sharp/asynchronous-client-socket-example.html