Возможно, это немного похоже на вопрос, зачем использовать System.Net.Sockets
(который предоставляет API для WinSock
вместо написания нашего собственного WinSock
API.
TcpClient
, абстрагируясь от множества различных способов * устанавливают sh сокет и делает доступными только несколько очень распространенных. Кроме того, это облегчает обработку таких вещей, как буферы. Аналогично NetworkStream
абстрагирует множество различных способов чтения / записи из сокета и позволяет использовать более известные потоки. на вершине NetworkStream
. Такие как TextWriter
и TextReader
.
Они на самом деле не имеют никакого значения с точки зрения кадрирования данных. Вам все еще нужно знать, где данные, которые вы ищете начинается и заканчивается. Хотя если ваши данные представляют собой старую добрую старую строку текста, то TextReader и TextWriter поверх NetworkStream делают это совершенно счастливым.
IMO, самое большое единственное преимущество для TcpClient и NetworkStream - это Asyn c методов и невероятно простых средств для разработки неблокирующего кода клиент / сервер ввода-вывода. В то время как вы можете сделать это прямо t Сокеты, это намного сложнее и сложнее.
Если вы только начинаете, я бы рекомендовал вообще пропустить NetworkStream (для чтения) и использовать System.IO.Pipelines
- который расположен поверх NetworkStream
, это еще больше отвлекает NetworkStream и ускоряет разработку.
Конечно, вы можете делать все, что TcpClient
и NetworkStream
, предоставляя себя, напрямую взаимодействуя с Socket, но вы обнаружите, что пишете много дублирующий код с множеством крайних случаев, которые уже были продуманы в TcpClient
и NetworkStream
.