Сокеты C # и SslStreams - PullRequest
       2

Сокеты C # и SslStreams

4 голосов
/ 16 сентября 2010

Я не понимаю, что лучше использовать при работе с сокетами.Объект Socket предоставляет методы отправки и получения (и асинхронные эквиваленты), но также позволяет создавать NetworkStream.Единственный способ получить удовольствие от использования Socket.Send - это обернуть вызов в блок, такой как:


using (Stream stream = new NetworkStream(socket)) {
  socket.Send(...);
  stream.Flush();
}

При использовании SslStream, если вы отправите сообщение в базовый сокет, будетотправлено через SSL?Должен ли я просто использовать Stream.Write (...) вместо методов сокетов?

Спасибо.

1 Ответ

15 голосов
/ 16 сентября 2010

Практические правила:

  • Если вы не используете NetworkStream, используйте методы Socket.Send / Socket.Receive.
  • Если вы используете NetworkStream (который оборачивает Socket), используйте методы NetworkStream.Read/Write, но не вызывайте методы Socket.
  • Если вы оборачиваете NetworkStream в SslStream, используйте методы NetworkStream.Read/Write довызов AuthenticateAsClient / Server и методов SslStream.Read/Write после.

После AuthenticateAsClient / Server ваше соединение будет защищено с помощью SSL.Тогда не вызывайте методы Socket или NetworkStream: это нарушит SslStream.

(Эти правила можно игнорировать при определенных обстоятельствах, но тогда вам нужно быть очень осторожным и точно знать, что такое Socket, NetworkStream иSslStream делать под капотом. Если вы всегда используете крайнюю обертку, вы на безопасной стороне.)

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