Было бы полезно узнать полное сообщение об ошибке.
Из того, что вы показали, я думаю, что выбрасываемое исключение не является SocketException.Документы MSDN для Socket.Connect показывают, что он может выдавать любое из четырех исключений, включая SocketException.
Я бы изменил тип исключения в перехвате на «Исключение» и установил точку останова на открывающей скобке.В следующий раз, когда он потерпит неудачу, вы будете точно знать, что идет не так, и вы можете отловить и обработать его оттуда.
Кроме того, я замечаю, что в то время как ваше клиентское задание возвращается из этого метода при ошибке соединенияработа сервера не выполняется;ловится исключение, показываются сообщения, и затем выполнение продолжается с reading = new Thread(new ThreadStart(this.get_msg));
.Это может привести к тому, что будут исключены дополнительные исключения, которые вы не ожидаете.Если вы не уверены, что здесь происходит сбой потока клиентских заданий, я бы обратил внимание на другую сторону этого метода.
Что касается помощи с многопоточностью, есть много ресурсов, включая другие вопросы по SO, которыеможет помочь вам начать.Что именно вы хотите многопоточности, и как вы должны быть в состоянии контролировать это, неизвестно, поэтому любой ответ, который я попытаюсь дать, вероятно, будет содержать ошибки, которые еще больше расстроят вас, потому что это был неправильный подход.