Freigeben über


NegotiateStream.Write(Byte[], Int32, Int32) Methode

Definition

Schreiben Sie die angegebene Anzahl von Byte mit dem angegebenen Puffer und dem angegebenen Offset in den zugrunde liegenden Stream.

public:
 override void Write(cli::array <System::Byte> ^ buffer, int offset, int count);
public override void Write (byte[] buffer, int offset, int count);
override this.Write : byte[] * int * int -> unit
Public Overrides Sub Write (buffer As Byte(), offset As Integer, count As Integer)

Parameter

buffer
Byte[]

Ein Byte-Array, das die in den Stream geschriebenen Bytes bereitstellt.

offset
Int32

Ein Int32, der den nullbasierten Speicherort im buffer enthält, ab dem das Lesen der in den Stream zu schreibenden Bytes begonnen werden soll.

count
Int32

Ein Int32, der die Anzahl der aus dem buffer gelesenen Bytes enthält.

Ausnahmen

buffer ist null.

offset is less than 0.

- oder -

offset ist größer als die Länge von buffer.

- oder -

Die Summe von offset und count ist größer als die Länge von buffer.

Fehler beim Schreibvorgang.

- oder -

Die Verschlüsselung wird verwendet, die Daten konnten jedoch nicht verschlüsselt werden.

Es wird bereits ein Schreibvorgang ausgeführt.

Dieses Objekt wurde geschlossen.

Es ist keine Authentifizierung erfolgt.

Beispiele

Im folgenden Codebeispiel wird das Schreiben in eine NegotiateStreamveranschaulicht.

int main()
{
   
   // Establish the remote endpoint for the socket.
   // For this example, use the local machine.
   IPHostEntry^ ipHostInfo = Dns::GetHostEntry( Dns::GetHostName() );
   IPAddress^ ipAddress = ipHostInfo->AddressList[ 0 ];
   
   // Client and server use port 11000. 
   IPEndPoint^ remoteEP = gcnew IPEndPoint( ipAddress,11000 );
   
   // Create a TCP/IP socket.
   TcpClient^ client = gcnew TcpClient;
   
   // Connect the socket to the remote endpoint.
   client->Connect( remoteEP );
   Console::WriteLine( L"Client connected to {0}.", remoteEP );
   
   // Ensure the client does not close when there is 
   // still data to be sent to the server.
   client->LingerState = (gcnew LingerOption( true,0 ));
   
   // Request authentication.
   NetworkStream^ clientStream = client->GetStream();
   NegotiateStream^ authStream = gcnew NegotiateStream( clientStream );
   
   // Request authentication for the client only (no mutual authentication).
   // Authenicate using the client's default credetials.
   // Permit the server to impersonate the client to access resources on the server only.
   // Request that data be transmitted using encryption and data signing.
   authStream->AuthenticateAsClient( dynamic_cast<NetworkCredential^>(CredentialCache::DefaultCredentials), 
          L"", 
          ProtectionLevel::EncryptAndSign, 
          TokenImpersonationLevel::Impersonation );
   
   DisplayAuthenticationProperties( authStream );
   DisplayStreamProperties( authStream );
   if ( authStream->CanWrite )
   {
      
      // Encode the test data into a byte array.
      array<Byte>^message = System::Text::Encoding::UTF8->GetBytes( L"Hello from the client." );
      authStream->Write( message, 0, message->Length );
      authStream->Flush();
      Console::WriteLine( L"Sent {0} bytes.", message->Length );
   }

   
   // Close the client connection.
   authStream->Close();
   Console::WriteLine( L"Client closed." );
}

    public static void Main(String[] args)
    {
        // Establish the remote endpoint for the socket.
        // For this example, use the local machine.
        IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
        IPAddress ipAddress = ipHostInfo.AddressList[0];
        // Client and server use port 11000.
        IPEndPoint remoteEP = new IPEndPoint(ipAddress,11000);
        // Create a TCP/IP socket.
       TcpClient 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);
        // Request authentication for the client only (no mutual authentication).
        // Authenicate using the client's default credetials.
        // Permit the server to impersonate the client to access resources on the server only.
        // Request that data be transmitted using encryption and data signing.
        authStream.AuthenticateAsClient(
             (NetworkCredential) CredentialCache.DefaultCredentials,
             "",
             ProtectionLevel.EncryptAndSign,
             TokenImpersonationLevel.Impersonation);
        DisplayAuthenticationProperties(authStream);
        DisplayStreamProperties(authStream);
        if (authStream.CanWrite)
        {
             // Encode the test data into a byte array.
            byte[] message = System.Text.Encoding.UTF8.GetBytes("Hello from the client.");
            authStream.Write(message, 0, message.Length);
            authStream.Flush();
            Console.WriteLine("Sent {0} bytes.", message.Length);
        }
        // Close the client connection.
        authStream.Close();
        Console.WriteLine("Client closed.");
}

Hinweise

Wenn verschlüsselung, signieren oder verschlüsselung und signieren aktiviert sind, liest diese Methode die Daten aus dem Puffer, verschlüsselt, signiert oder signiert sie und überträgt sie mithilfe des zugrunde liegenden Datenstroms. Wenn keine Sicherheitsdienste wie Datenverschlüsselung oder Signatur verwendet werden, wird diese Methode für den zugrunde liegenden Stream aufgerufen Write .

Diese Methode blockiert, während der Schreibvorgang abgeschlossen ist. Verwenden Sie die WriteAsync -Methode, um das Blockieren während des Vorgangs zu verhindern.

Sie können diese Methode erst aufrufen, wenn Sie sich erfolgreich authentifiziert haben. Rufen Sie zum Authentifizieren eine der AuthenticateAsClientMethoden , AuthenticateAsClientAsync, BeginAuthenticateAsClient, AuthenticateAsServer, oder BeginAuthenticateAsServerAuthenticateAsServerAsyncauf.

Mehrere NegotiateStream gleichzeitige Schreibvorgänge werden von der -Klasse nicht unterstützt. Wenn Sie versuchen, einen Schreibvorgang zu starten, während ein anderer Schreibvorgang bereits für denselben Stream ausgeführt wird, wird eine NotSupportedException Ausnahme ausgelöst.

Gilt für: