Не думаю, что для этой цели целесообразно использовать DataAvailable. Конец вашего ответа - то, что говорится в вашем протоколе.
Лучше использовать блокирующие вызовы, такие как «Чтение», чтобы читать ваши материалы, и использовать любой протокол, который вы установили, чтобы определить, читать больше и сколько. Может случиться так, что возвращаются не все данные, которые вы хотите, потому что Read не возвращается, когда все ваши данные читаются, но когда некоторые данные читаются, вам нужно проверить, сколько было прочитано.
Если ваш протокол - Telnet, вы, вероятно, захотите отвечать на каждый полученный байт, как с терминалом, который вы хотите выводить на экран или обрабатывать команды, а что нет.
DataAvailable, возможно, подходит для проверки, будет ли блокироваться чтение при вызове (он вернется с тем, что находится в буфере), но это сделает ваш цикл менее простым.