NegotiateStream.Write(Byte[], Int32, Int32) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Consente di scrivere il numero specificato di Byte nel flusso sottostante, utilizzando il buffer e l'offset specificati.
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)
Parametri
- offset
- Int32
Valore Int32 contenente la posizione in base zero in buffer
da cui iniziare la lettura dei byte che devono essere scritti nel flusso.
Eccezioni
buffer
è null
.
offset is less than 0
.
-oppure-
offset
è maggiore della lunghezza di buffer
.
-oppure-
la somma di offset
e conteggio è maggiore della lunghezza del buffer
.
Operazione di scrittura non riuscita.
-oppure-
La crittografia è in uso, ma non è stato possibile crittografare i dati.
È già in corso un'operazione di scrittura.
L'oggetto è stato chiuso.
L'autenticazione non è stata effettuata.
Esempio
Nell'esempio di codice seguente viene illustrata la scrittura in un oggetto 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.");
}
Commenti
Se la crittografia, la firma o la crittografia e la firma sono abilitate, questo metodo legge i dati dal buffer, crittografa, firma o crittografa e li trasmette usando il flusso sottostante. Se non sono in uso servizi di sicurezza come la crittografia dei dati o la firma, questo metodo richiama Write nel flusso sottostante.
Questo metodo si blocca mentre l'operazione di scrittura viene completata. Per evitare il blocco al termine dell'operazione, utilizzare il WriteAsync metodo .
Non è possibile chiamare questo metodo fino a quando non è stata eseguita correttamente l'autenticazione. Per eseguire l'autenticazioneAuthenticateAsClient, chiamare uno dei metodi , AuthenticateAsClientAsync, BeginAuthenticateAsClientAuthenticateAsServer, AuthenticateAsServerAsync, o BeginAuthenticateAsServer .
La NegotiateStream classe non supporta più operazioni di scrittura simultanee. Se si tenta di avviare un'operazione di scrittura mentre un'altra operazione di scrittura è già in esecuzione nello stesso flusso, verrà generata un'eccezione NotSupportedException .