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.Write the specified number of Bytes to the underlying stream using the specified buffer and offset.

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.A Byte array that supplies the bytes written to the stream.

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.An Int32 containing the zero-based location in buffer at which to begin reading bytes to be written to the stream.

count
Int32

Ein Int32, der die Anzahl der aus dem buffer gelesenen Bytes enthält.A Int32 containing the number of bytes to read from buffer.

Ausnahmen

buffer ist null.buffer is null.

offset is less than 0offset is less than 0.

- oder --or- offset ist größer als die Länge von buffer.offset is greater than the length of buffer.

- oder --or- Die Summe von offset und count ist größer als die Länge von buffer.offset plus count is greater than the length of buffer.

Fehler beim Schreibvorgang.The write operation failed.

- oder --or-

Die Verschlüsselung wird verwendet, die Daten konnten jedoch nicht verschlüsselt werden.Encryption is in use, but the data could not be encrypted.

Es wird bereits ein Schreibvorgang ausgeführt.There is already a write operation in progress.

Dieses Objekt wurde geschlossen.This object has been closed.

Es ist keine Authentifizierung erfolgt.Authentication has not occurred.

Beispiele

Im folgenden Codebeispiel wird das Schreiben in eine NegotiateStreamveranschaulicht.The following code example demonstrates writing to a NegotiateStream.

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, Signierung oder Verschlüsselung und Signierung aktiviert ist, liest diese Methode die Daten aus dem Puffer, verschlüsselt, signiert oder verschlüsselt Sie und überträgt sie mit dem zugrunde liegenden Stream.If encryption, signing, or encryption and signing are enabled, this method reads the data from buffer, encrypts, signs, or encrypts and signs it, and transmits it using the underlying stream. Wenn keine Sicherheitsdienste wie Datenverschlüsselung oder Signierung verwendet werden, ruft diese Methode Write für den zugrunde liegenden Stream auf.If no security services such as data encryption or signing are in use, this method invokes Write on the underlying stream.

Diese Methode wird blockiert, während der Schreibvorgang abgeschlossen ist.This method blocks while the write operation completes. Verwenden Sie die Write-Methode, um das Blockieren zu verhindern, während der Vorgang abgeschlossen ist.To prevent blocking while the operation completes, use the Write method.

Diese Methode kann erst aufgerufen werden, nachdem Sie sich erfolgreich authentifiziert haben.You cannot call this method until you have successfully authenticated. Um sich zu authentifizieren, wenden Sie eine der Methoden AuthenticateAsClient, BeginAuthenticateAsClient, AuthenticateAsServeroder BeginAuthenticateAsServer an.To authenticate, call one of the AuthenticateAsClient, BeginAuthenticateAsClient, AuthenticateAsServer, or BeginAuthenticateAsServer methods.

Die NegotiateStream-Klasse unterstützt nicht mehrere gleichzeitige Schreibvorgänge.The NegotiateStream class does not support multiple simultaneous write operations. Wenn Sie versuchen, einen Schreibvorgang zu starten, während bereits ein anderer Schreibvorgang im gleichen Stream ausgeführt wird, wird eine NotSupportedException Ausnahme ausgelöst.If you attempt to start a write operation while another write operation is already executing on the same stream, a NotSupportedException exception will be thrown.

Gilt für: