В вашем коде нет ничего плохого, он отлично работает.
Вызов метода Accept () в классе Socket будет блокироваться до тех пор, пока не будет предпринята попытка подключения клиента к вашему TCP-порту 12345.
«Здесь останавливается; ничего не происходит» - это правильное и ожидаемое поведение, но не точное описание.
Что происходит, так это то, что ваш сокет ожидает подключения клиента.
См .: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.accept.aspx
"В режиме блокировки Accept блокируется до тех пор, пока попытка входящего соединения не будет поставлена в очередь. Как только соединение принято, исходный сокет продолжает ставить в очередь входящие запросы на соединение, пока вы не закроете его."
Чтобы проверить ваш код, откройте клиент Telent (введите «telnet» в командной строке) и введите команду «open localhost 12345». Ваш код «проснется».