В чем разница между классами NetworkStream и Socket? - PullRequest
4 голосов
/ 01 декабря 2010

У меня есть проект, в котором я могу захотеть абстрагировать связь между клиентом и сервером. Я изначально использовал сокеты и TCP. Затем я подумал, что было бы неплохо иметь возможность переключиться на канал межпроцессного взаимодействия. Затем я посмотрел на класс System.IO.PipedStream и увидел, что между PipeStream и классом Socket было много совпадений. Но когда я взглянул на класс Socket, он наследуется от Object. Таким образом, между Socket и PipeStreams нет общего интерфейса или абстрактного класса.

Затем я вспомнил кое-что о NetworkStream. Это очевидно оборачивает класс Сокета. Но по крайней мере и NetworkStream, и PipeStream наследуются от Stream. Что означает, что я могу поменять свою реализацию. Я думаю, я еще не пробовал это. Я все это время использовал сокеты.

Итак, мой вопрос: есть ли недостаток в использовании класса NetworkStream по сравнению с классом Socket. Есть какие-нибудь ошибки или что-то, на что стоит обратить внимание?

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Поскольку вы не знаете о каких-либо недостатках при переключении с Socket на NetworkStream, вам, скорее всего, не нужно будет использовать Socket напрямую. Socket дает вам гораздо больше контроля, но, поскольку вы не знаете о недостатках, вам, скорее всего, не понадобится этот контроль.

Просто помните, что вещи не становятся надежными или быстрыми только потому, что вы переходите на NetworkStream. (Может быть легко забыть, когда вы начнете переключаться между различными реализациями потока).

1 голос
/ 01 декабря 2010

Если вы вынуждены использовать опции низкого уровня, такие как сокеты и каналы, и вам нужна абстракция для извлечения потоковых данных из этих источников данных, тогда класс Stream идеален, поскольку он обеспечивает эту абстракциюэта модель.

Если вы кодируете против экземпляров Stream, тогда вы можете иметь что-либо, реализующее Stream, и не беспокоиться о базовом транспорте.NetworkStream просто оборачивает экземпляр Socket и применяет вызовы модели pull (Stream) к Socket.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...