SslStream.DataAvailable недопустимая функция - PullRequest
3 голосов
/ 27 марта 2009

Я переношу код C # с использования NetworkStream на SSLStream, однако там, где я использую stream.DataAvailable, я получаю сообщение об ошибке:

Ошибка 1 «System.Net.Security.SslStream» не содержит определения для DataAvailable и без расширения метод DataAvailable, принимающий первый аргумент типа 'System.Net.Security.SslStream' может быть найдены (вы пропускаете использование директива или ссылка на сборку?)

теперь моя локальная копия MSDN не включает DataAvailable в качестве члена SslStream, однако http://msdn.microsoft.com/en-us/library/dd170317.aspx говорит, что у него есть член DataAvailable. вот копия моего кода.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using System.IO;

namespace Node
{

  public static class SSLCommunicator
  {
    static TcpClient client = null;
    static SslStream stream = null;
    static List<byte> networkStreamInput = new List<byte>();
    public static void connect(string server, Int32 port)
    {
        try
        {
          client = new TcpClient(server, port);
          stream = new SslStream(client.GetStream(),false);
    ...
    ...
    ...
    public static List<DataBlock> getServerInput() 
    {
      List<DataBlock> ret = new List<DataBlock>();
      try
      {
      //check to see if stream is readable.
      if (stream.CanRead)
      {
        //Check to see if there is data available.
        if (stream.DataAvailable)
        {
          byte[] readBuffer = new byte[1024];
          int numberOfBytesRead = 0;
          //while data is available buffer the data.
          do
          {
            numberOfBytesRead = stream.Read(readBuffer, 0, readBuffer.Length);
            byte[] tmp = new byte[numberOfBytesRead];
            Array.Copy(readBuffer, tmp, numberOfBytesRead);
            networkStreamInput.AddRange(tmp);
          } while (stream.DataAvailable);
     ...

Кроме того, если у вас есть лучший способ передать мой вывод потока в управляемый массив (в этом коде будет проведен некоторый анализ), я бы хотел помочь. Я использую Visual Studio 2008

- EDIT Я только что понял, что связан со встроенным SDK, это не встроенная система, так как узнать, доступны ли данные в обычном .net SDK?

1 Ответ

2 голосов
/ 27 марта 2009

Страница, которую вы просматриваете, предназначена для .NET Micro Framework.

Согласно этой странице для .Net 2.0 и этой странице для .Net 3.5 , в SSLStream отсутствует свойство DataAvailable.

Редактировать: Разве вы не можете просто позвонить в Read () и посмотреть, получите ли вы что-нибудь обратно? я не думаю, что это заблокирует.

...