Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

NegotiateStream, classe

Fournit un flux qui utilise le protocole de sécurité Negotiate pour authentifier le client et éventuellement le serveur, dans les communications client-serveur.

System.Object
  System.MarshalByRefObject
    System.IO.Stream
      System.Net.Security.AuthenticatedStream
        System.Net.Security.NegotiateStream

Espace de noms :  System.Net.Security
Assembly :  System (dans System.dll)
public class NegotiateStream : AuthenticatedStream

Le type NegotiateStream expose les membres suivants.

  Nom Description
Méthode publique NegotiateStream(Stream) Initialise une nouvelle instance de la classe NegotiateStream à l'aide du Stream spécifié.
Méthode publique NegotiateStream(Stream, Boolean) Initialise une nouvelle instance de la classe NegotiateStream en utilisant le Stream et le comportement de clôture de flux spécifiés.
Début
  Nom Description
Propriété publique CanRead Obtient une valeur Boolean qui indique si le flux sous-jacent est accessible en lecture. (Substitue Stream.CanRead.)
Propriété publique CanSeek Obtient une valeur Boolean qui indique si le flux sous-jacent peut faire l'objet d'une recherche. (Substitue Stream.CanSeek.)
Propriété publique CanTimeout Obtient une valeur Boolean qui indique si le flux sous-jacent prend en charge les délais d'attente. (Substitue Stream.CanTimeout.)
Propriété publique CanWrite Obtient une valeur Boolean qui indique si le flux sous-jacent est accessible en écriture. (Substitue Stream.CanWrite.)
Propriété publique ImpersonationLevel Obtient une valeur qui indique comment le serveur peut utiliser les informations d'identification du client.
Propriété protégée InnerStream Obtient le flux utilisé par ce AuthenticatedStream pour envoyer et recevoir des données. (Hérité de AuthenticatedStream.)
Propriété publique IsAuthenticated Obtient une valeur Boolean qui indique si l'authentification a réussi. (Substitue AuthenticatedStream.IsAuthenticated.)
Propriété publique IsEncrypted Obtient une valeur Boolean qui indique si ce NegotiateStream utilise le chiffrement de données. (Substitue AuthenticatedStream.IsEncrypted.)
Propriété publique IsMutuallyAuthenticated Obtient une valeur Boolean qui indique si le serveur et le client ont tous les deux été authentifiés. (Substitue AuthenticatedStream.IsMutuallyAuthenticated.)
Propriété publique IsServer Obtient une valeur Boolean qui indique si le côté local de la connexion utilisée par ce NegotiateStream a été authentifié comme serveur. (Substitue AuthenticatedStream.IsServer.)
Propriété publique IsSigned Obtient une valeur Boolean qui indique si les données envoyées à l'aide de ce flux sont signées. (Substitue AuthenticatedStream.IsSigned.)
Propriété publique LeaveInnerStreamOpen Obtient une valeur indiquant si le flux utilisé par ce AuthenticatedStream pour envoyer et recevoir des données a été laissé ouvert. (Hérité de AuthenticatedStream.)
Propriété publique Length Obtient la longueur du flux sous-jacent. (Substitue Stream.Length.)
Propriété publique Position Obtient ou définit la position actuelle dans le flux sous-jacent. (Substitue Stream.Position.)
Propriété publique ReadTimeout Obtient ou définit la durée pendant laquelle une opération de lecture reste bloquée en attendant des données. (Substitue Stream.ReadTimeout.)
Propriété publique RemoteIdentity Obtient des informations à propos de l'identité du tiers distant qui partage ce flux authentifié.
Propriété publique WriteTimeout Obtient ou définit la durée pendant laquelle une opération d'écriture reste bloquée en attendant des données. (Substitue Stream.WriteTimeout.)
Début
  Nom Description
Méthode publique AuthenticateAsClient() Appelé par les clients pour authentifier le client, et éventuellement le serveur, dans une connexion client-serveur.
Méthode publique AuthenticateAsClient(NetworkCredential, String) Appelé par les clients pour authentifier le client, et éventuellement le serveur, dans une connexion client-serveur. Le processus d'authentification utilise les informations d'identification du client spécifiées.
Méthode publique AuthenticateAsClient(NetworkCredential, ChannelBinding, String) Appelé par les clients pour authentifier le client, et éventuellement le serveur, dans une connexion client-serveur. Le processus d'authentification utilise les informations d'identification du client et la liaison de canal spécifiées.
Méthode publique AuthenticateAsClient(NetworkCredential, String, ProtectionLevel, TokenImpersonationLevel) Appelé par les clients pour authentifier le client, et éventuellement le serveur, dans une connexion client-serveur. Le processus d'authentification utilise les options d'authentification et les informations d'identification spécifiées.
Méthode publique AuthenticateAsClient(NetworkCredential, ChannelBinding, String, ProtectionLevel, TokenImpersonationLevel) Appelé par les clients pour authentifier le client, et éventuellement le serveur, dans une connexion client-serveur. Le processus d'authentification utilise les informations d'identification du client, les options d'authentification et la liaison de canal spécifiées.
Méthode publique AuthenticateAsServer() Appelé par les serveurs pour authentifier le client, et éventuellement le serveur, dans une connexion client-serveur.
Méthode publique AuthenticateAsServer(ExtendedProtectionPolicy) Appelé par les serveurs pour authentifier le client, et éventuellement le serveur, dans une connexion client-serveur. Le processus d'authentification utilise la stratégie de protection étendue spécifiée.
Méthode publique AuthenticateAsServer(NetworkCredential, ProtectionLevel, TokenImpersonationLevel) Appelé par les serveurs pour authentifier le client, et éventuellement le serveur, dans une connexion client-serveur. Le processus d'authentification utilise les options d'authentification et les informations d'identification du serveur spécifiées.
Méthode publique AuthenticateAsServer(NetworkCredential, ExtendedProtectionPolicy, ProtectionLevel, TokenImpersonationLevel) Appelé par les serveurs pour authentifier le client, et éventuellement le serveur, dans une connexion client-serveur. Le processus d'authentification utilise les informations d'identification du serveur, les options d'authentification et la stratégie de protection étendue spécifiées.
Méthode publique BeginAuthenticateAsClient(AsyncCallback, Object) Appelé par les clients pour commencer une opération asynchrone d'authentification du client, et éventuellement du serveur, dans une connexion client-serveur. Cette méthode ne provoque pas de blocage.
Méthode publique BeginAuthenticateAsClient(NetworkCredential, String, AsyncCallback, Object) Appelé par les clients pour commencer une opération asynchrone d'authentification du client, et éventuellement du serveur, dans une connexion client-serveur. Le processus d'authentification utilise les informations d'identification spécifiées. Cette méthode ne provoque pas de blocage.
Méthode publique BeginAuthenticateAsClient(NetworkCredential, ChannelBinding, String, AsyncCallback, Object) Appelé par les clients pour commencer une opération asynchrone d'authentification du client, et éventuellement du serveur, dans une connexion client-serveur. Le processus d'authentification utilise les informations d'identification et la liaison de canal spécifiées. Cette méthode ne provoque pas de blocage.
Méthode publique BeginAuthenticateAsClient(NetworkCredential, String, ProtectionLevel, TokenImpersonationLevel, AsyncCallback, Object) Appelé par les clients pour commencer une opération asynchrone d'authentification du client, et éventuellement du serveur, dans une connexion client-serveur. Le processus d'authentification utilise les options d'authentification et les informations d'identification spécifiées. Cette méthode ne provoque pas de blocage.
Méthode publique BeginAuthenticateAsClient(NetworkCredential, ChannelBinding, String, ProtectionLevel, TokenImpersonationLevel, AsyncCallback, Object) Appelé par les clients pour commencer une opération asynchrone d'authentification du client, et éventuellement du serveur, dans une connexion client-serveur. Le processus d'authentification utilise les informations d'identification, les options d'authentification et la liaison de canal spécifiées. Cette méthode ne provoque pas de blocage.
Méthode publique BeginAuthenticateAsServer(AsyncCallback, Object) Appelé par les serveurs pour commencer une opération asynchrone d'authentification du client, et éventuellement du serveur, dans une connexion client-serveur. Cette méthode ne provoque pas de blocage.
Méthode publique BeginAuthenticateAsServer(ExtendedProtectionPolicy, AsyncCallback, Object) Appelé par les serveurs pour commencer une opération asynchrone d'authentification du client, et éventuellement du serveur, dans une connexion client-serveur. Le processus d'authentification utilise la stratégie de protection étendue spécifiée. Cette méthode ne provoque pas de blocage.
Méthode publique BeginAuthenticateAsServer(NetworkCredential, ProtectionLevel, TokenImpersonationLevel, AsyncCallback, Object) Appelé par les serveurs pour commencer une opération asynchrone d'authentification du client, et éventuellement du serveur, dans une connexion client-serveur. Le processus d'authentification utilise les options d'authentification et les informations d'identification du serveur spécifiées. Cette méthode ne provoque pas de blocage.
Méthode publique BeginAuthenticateAsServer(NetworkCredential, ExtendedProtectionPolicy, ProtectionLevel, TokenImpersonationLevel, AsyncCallback, Object) Appelé par les serveurs pour commencer une opération asynchrone d'authentification du client, et éventuellement du serveur, dans une connexion client-serveur. Le processus d'authentification utilise les informations d'identification du serveur, les options d'authentification et la stratégie de protection étendue spécifiées. Cette méthode ne provoque pas de blocage.
Méthode publique BeginRead Commence une opération de lecture asynchrone qui lit des données du flux et les stocke dans le tableau spécifié. (Substitue Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).)
Méthode publique BeginWrite Commence une opération d'écriture asynchrone qui écrit des Bytes de la mémoire tampon spécifiée vers le flux. (Substitue Stream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object).)
Méthode publique Close Ferme le flux actuel et libère les ressources (telles que les sockets et les handles de fichiers) associées à celui-ci. (Hérité de Stream.)
Méthode publique CopyTo(Stream) Lit les octets à partir du flux actuel et les écrit dans le flux de destination. (Hérité de Stream.)
Méthode publique CopyTo(Stream, Int32) Lit tous les octets du flux actuel et les écrit dans un flux de destination, à l'aide d'une taille de mémoire tampon spécifiée. (Hérité de Stream.)
Méthode publique CreateObjRef Crée un objet contenant toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant. (Hérité de MarshalByRefObject.)
Méthode protégée CreateWaitHandle Obsolète. Alloue un objet WaitHandle. (Hérité de Stream.)
Méthode publique Dispose() Libère toutes les ressources utilisées par Stream. (Hérité de Stream.)
Méthode protégée Dispose(Boolean) Libère les ressources non managées utilisées par NegotiateStream et libère éventuellement les ressources managées. (Substitue AuthenticatedStream.Dispose(Boolean).)
Méthode publique EndAuthenticateAsClient Termine une opération d'authentification du client asynchrone en attente qui a été démarrée avec un appel à BeginAuthenticateAsClient.
Méthode publique EndAuthenticateAsServer Termine une opération d'authentification du client asynchrone en attente qui a été démarrée avec un appel à BeginAuthenticateAsServer.
Méthode publique EndRead Termine une opération de lecture asynchrone qui a été démarrée avec un appel à BeginRead. (Substitue Stream.EndRead(IAsyncResult).)
Méthode publique EndWrite Termine une opération d'écriture asynchrone qui a été démarrée avec un appel à BeginWrite. (Substitue Stream.EndWrite(IAsyncResult).)
Méthode publique Equals(Object) Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.)
Méthode protégée Finalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publique Flush Provoque l'écriture des données mises en mémoire tampon sur le périphérique sous-jacent. (Substitue Stream.Flush().)
Méthode publique GetHashCode Sert de fonction de hachage pour un type particulier. (Hérité de Object.)
Méthode publique GetLifetimeService Récupère l'objet de service de durée de vie en cours qui contrôle la stratégie de durée de vie de cette instance. (Hérité de MarshalByRefObject.)
Méthode publique GetType Obtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode publique InitializeLifetimeService Obtient un objet de service de durée de vie pour contrôler la stratégie de durée de vie de cette instance. (Hérité de MarshalByRefObject.)
Méthode protégée MemberwiseClone() Crée une copie superficielle de l'objet Object actif. (Hérité de Object.)
Méthode protégée MemberwiseClone(Boolean) Crée une copie superficielle de l'objet MarshalByRefObject actuel. (Hérité de MarshalByRefObject.)
Méthode protégée ObjectInvariant Infrastructure. Prend en charge un Contract. (Hérité de Stream.)
Méthode publique Read Lit les données de ce flux et les stocke dans le tableau spécifié. (Substitue Stream.Read(Byte[], Int32, Int32).)
Méthode publique ReadByte Lit un octet à partir du flux et avance d'un octet la position au sein du flux, ou retourne -1 s'il se situe à la fin du flux. (Hérité de Stream.)
Méthode publique Seek Lève NotSupportedException. (Substitue Stream.Seek(Int64, SeekOrigin).)
Méthode publique SetLength Définit la longueur du flux sous-jacent. (Substitue Stream.SetLength(Int64).)
Méthode publique ToString Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.)
Méthode publique Write Écrivez le nombre spécifié de Bytes dans le flux sous-jacent à l'aide de la mémoire tampon et de l'offset spécifiés. (Substitue Stream.Write(Byte[], Int32, Int32).)
Méthode publique WriteByte Écrit un octet à la position actuelle dans le flux actuel et avance d'un octet la position dans flux. (Hérité de Stream.)
Début

Utilisez la classe NegotiateStream pour l'authentification et pour protéger les informations transmises entre un client et un serveur. À l'aide de NegotiateStream, vous pouvez effectuer les tâches suivantes.

  • Envoyer les informations d'identification du client au serveur pour l'Emprunt d'identité ou la Délégation.

  • Demander une authentification du serveur.

  • Chiffrer et/ou signer des données avant de les transmettre.

L'authentification doit être réalisée avant la transmission des informations. Les clients demandent l'authentification à l'aide des méthodes AuthenticateAsClient synchrones qui assurent un blocage jusqu'à ce que l'authentification soit accomplie ou des méthodes BeginAuthenticateAsClient asynchrones qui n'assurent aucun blocage pendant l'exécution de l'authentification. Les serveurs demandent l'authentification à l'aide de la méthode AuthenticateAsServer synchrone ou de la méthode BeginAuthenticateAsServer asynchrone. Le client, et éventuellement le serveur, sont authentifiés à l'aide du protocole de sécurité Negotiate. Sur les systèmes Windows 95/98, Windows NT LAN Manager (NTLM) est le protocole utilisé pour l'authentification. Sur les autres plateformes, le protocole Kerberos est utilisé pour l'authentification si le client et le serveur le prennent en charge ; sinon, NTLM est utilisé. Pour obtenir une description détaillée de ces protocoles, consultez la documentation du kit de développement Platform SDK sur MSDN, à l'adresse msdn.microsoft.com/library/. La classe NegotiateStream exécute l'authentification à l'aide de l'interface SSPI (Security Support Provider Interface).

Lorsque l'authentification réussit, vous devez vérifier les propriétés IsEncrypted et IsSigned pour identifier les services de sécurité qui seront utilisés par NegotiateStream pour sécuriser vos données pendant leur transmission. Vérifiez la propriété IsMutuallyAuthenticated pour déterminer si l'authentification mutuelle a eu lieu. Vous pouvez obtenir des informations à propos du client ou du serveur distants à l'aide de la propriété RemoteIdentity.

Si l'authentification échoue, vous recevez AuthenticationException ou InvalidCredentialException. Dans ce cas, vous pouvez recommencer l'authentification en utilisant des informations d'identification différentes.

Vous envoyez des données à l'aide de la méthode Write synchrone ou de la méthode BeginWrite asynchrone. Vous recevez des données à l'aide de la méthode Read synchrone ou de la méthode BeginRead asynchrone. Si des services de sécurité, tels que le chiffrement ou la signature sont activés, ils sont automatiquement appliqués à vos données par NegotiateStream.

NegotiateStream transmet des données à l'aide d'un flux que vous fournissez lors de la création de NegotiateStream. Lorsque vous fournissez ce flux sous-jacent, vous avez la possibilité de spécifier si la fermeture de NegotiateStream ferme également le flux sous-jacent.

L'exemple de code suivant montre le côté client d'une connexion client-serveur qui utilise NegotiateStream. Le client authentifie et envoie un message au serveur de façon asynchrone.


using System;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.Text;

namespace Examples.NegotiateStreamExample
{
    public class ASynchronousAuthenticatingTcpClient 
    {   
        static TcpClient client = null;

        public static void Main(String[] args)  
        {
            // Establish the remote endpoint for the socket.
            // For this example, use the local machine.
            IPHostEntry ipHostInfo = Dns.GetHostEntry("localhost");
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            // Client and server use port 11000. 
            IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);
            // Create a TCP/IP socket.
            client = new TcpClient();
            // Connect the socket to the remote endpoint.
            client.Connect(remoteEP);
            Console.WriteLine("Client connected to {0}.", remoteEP.ToString());
            // Ensure the client does not close when there is 
            // still data to be sent to the server.
            client.LingerState = (new LingerOption(true, 0));
            // Request authentication.
            NetworkStream clientStream = client.GetStream();
            NegotiateStream authStream = new NegotiateStream(clientStream, false); 
            // Pass the NegotiateStream as the AsyncState object 
            // so that it is available to the callback delegate.
            IAsyncResult ar = authStream.BeginAuthenticateAsClient(
                new AsyncCallback(EndAuthenticateCallback),
                authStream
                );
            Console.WriteLine("Client waiting for authentication...");
            // Wait until the result is available.
            ar.AsyncWaitHandle.WaitOne();
            // Display the properties of the authenticated stream.
            AuthenticatedStreamReporter.DisplayProperties(authStream);
            // Send a message to the server.
            // Encode the test data into a byte array.
            byte[] message = Encoding.UTF8.GetBytes("Hello from the client.");
            ar = authStream.BeginWrite(message, 0, message.Length,
                new AsyncCallback(EndWriteCallback),
                authStream);
            ar.AsyncWaitHandle.WaitOne();
            Console.WriteLine("Sent {0} bytes.", message.Length);
            // Close the client connection.
            authStream.Close();
            Console.WriteLine("Client closed.");
        }
        // The following method is called when the authentication completes.
        public static void EndAuthenticateCallback (IAsyncResult ar)
        {
            Console.WriteLine("Client ending authentication...");
            NegotiateStream authStream = (NegotiateStream) ar.AsyncState;
            Console.WriteLine("ImpersonationLevel: {0}", authStream.ImpersonationLevel);

            // End the asynchronous operation.
            authStream.EndAuthenticateAsClient(ar);
        }
        // The following method is called when the write operation completes.
        public static void EndWriteCallback (IAsyncResult ar)
        {
            Console.WriteLine("Client ending write operation...");
            NegotiateStream authStream = (NegotiateStream) ar.AsyncState;

            // End the asynchronous operation.
            authStream.EndWrite(ar);
        }
    }

    // The following class displays the properties of an authenticatedStream.
    public class AuthenticatedStreamReporter
{
    public static void DisplayProperties(AuthenticatedStream stream)
   {
        Console.WriteLine("IsAuthenticated: {0}", stream.IsAuthenticated);
        Console.WriteLine("IsMutuallyAuthenticated: {0}", stream.IsMutuallyAuthenticated);
        Console.WriteLine("IsEncrypted: {0}", stream.IsEncrypted);
        Console.WriteLine("IsSigned: {0}", stream.IsSigned);
        Console.WriteLine("IsServer: {0}", stream.IsServer);
    }
}
}


L'exemple de code suivant montre le côté serveur d'une connexion client-serveur qui utilise NegotiateStream pour authentifier le client et lire un message envoyé par le client.


using System;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Authentication;
using System.Security.Principal;
using System.Text;
using System.IO;
using System.Threading;

namespace Examples.NegotiateStreamExample
{
    public class AsynchronousAuthenticatingTcpListener 
    {
        public static void Main() 
        {   
            // Create an IPv4 TCP/IP socket. 
            TcpListener listener = new TcpListener(IPAddress.Any, 11000);
            // Listen for incoming connections.
            listener.Start();
            while (true) 
            {
                TcpClient clientRequest = null;
                // Application blocks while waiting for an incoming connection.
                // Type CNTL-C to terminate the server.
                clientRequest = listener.AcceptTcpClient();
                Console.WriteLine("Client connected.");
                // A client has connected. 
                try
                {
                    AuthenticateClient (clientRequest);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    continue;
                }

            }

        }
        public static void AuthenticateClient(TcpClient clientRequest)
        {
            NetworkStream stream = clientRequest.GetStream(); 
            // Create the NegotiateStream.
            NegotiateStream authStream = new NegotiateStream(stream, false); 
            // Save the current client and NegotiateStream instance 
            // in a ClientState object.
            ClientState cState = new ClientState(authStream, clientRequest);
            // Listen for the client authentication request.
            authStream.BeginAuthenticateAsServer (
                new AsyncCallback(EndAuthenticateCallback),
                cState
                );
            // Wait until the authentication completes.
            cState.Waiter.WaitOne();
            cState.Waiter.Reset();
            authStream.BeginRead(cState.Buffer, 0, cState.Buffer.Length, 
                   new AsyncCallback(EndReadCallback), 
                   cState);
            cState.Waiter.WaitOne();
            // Finished with the current client.
            authStream.Close();
            clientRequest.Close();
        }
        // The following method is invoked by the
        // BeginAuthenticateAsServer callback delegate.

        public static void EndAuthenticateCallback (IAsyncResult ar)
        {
            // Get the saved data.
            ClientState cState = (ClientState) ar.AsyncState;
            TcpClient clientRequest = cState.Client;
            NegotiateStream authStream = (NegotiateStream) cState.AuthenticatedStream;
            Console.WriteLine("Ending authentication.");
            // Any exceptions that occurred during authentication are
            // thrown by the EndAuthenticateAsServer method.
            try 
            {
                // This call blocks until the authentication is complete.
                authStream.EndAuthenticateAsServer(ar);
            }
            catch (AuthenticationException e)
            {
                Console.WriteLine(e);
                Console.WriteLine("Authentication failed - closing connection.");
                cState.Waiter.Set();
                return;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                Console.WriteLine("Closing connection.");
                cState.Waiter.Set();
                return;
            }
            // Display properties of the authenticated client.
            IIdentity id = authStream.RemoteIdentity;
            Console.WriteLine("{0} was authenticated using {1}.", 
                id.Name, 
                id.AuthenticationType
                );
            cState.Waiter.Set();

    }
        public static void EndReadCallback(IAsyncResult ar)
        {
            // Get the saved data.
            ClientState cState = (ClientState) ar.AsyncState;
            TcpClient clientRequest = cState.Client;
            NegotiateStream authStream = (NegotiateStream) cState.AuthenticatedStream; 
            // Get the buffer that stores the message sent by the client.
            int bytes = -1;
            // Read the client message.
            try
            {
                    bytes = authStream.EndRead(ar);
                    cState.Message.Append(Encoding.UTF8.GetChars(cState.Buffer, 0, bytes));
                    if (bytes != 0)
                    {
                         authStream.BeginRead(cState.Buffer, 0, cState.Buffer.Length, 
                               new AsyncCallback(EndReadCallback), 
                               cState);
                               return;
                 }
            }
            catch (Exception e)
            {
                // A real application should do something
                // useful here, such as logging the failure.
                Console.WriteLine("Client message exception:");
                Console.WriteLine(e);
                cState.Waiter.Set();
                return;
            }
            IIdentity id = authStream.RemoteIdentity;
            Console.WriteLine("{0} says {1}", id.Name, cState.Message.ToString());
            cState.Waiter.Set();
        }
    }
    // ClientState is the AsyncState object.
    internal class ClientState
    {
        private AuthenticatedStream authStream = null;
        private  TcpClient client = null;
        byte[] buffer = new byte[2048];
        StringBuilder message = null;
        ManualResetEvent waiter = new ManualResetEvent(false);
        internal ClientState(AuthenticatedStream a, TcpClient theClient)
        {
            authStream = a;
            client = theClient;
        }
        internal TcpClient Client
        { 
            get { return client;}
        }
        internal AuthenticatedStream AuthenticatedStream
        {
            get { return authStream;}
        }
        internal byte[] Buffer
        {
              get { return buffer;}
        }
        internal StringBuilder Message
        {
            get 
            { 
                if (message == null)
                    message = new StringBuilder();
                return message;
             }
        }
        internal ManualResetEvent Waiter
        {
            get 
            { 
                return waiter;
             }
        }
    }
}


.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Contenu de la communauté Ajouter
Annotations FAQ