NegotiateStream.Write(Byte[], Int32, Int32) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Pomocí zadané vyrovnávací paměti a posunu napište zadaný počet Bytes do podkladového datového proudu.
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)
Parametry
- offset
- Int32
Obsahující Int32 umístění založené na nule, ve buffer kterém se mají začít číst bajty, které se mají zapisovat do datového proudu.
Výjimky
buffer je null.
offset je menší než 0.
nebo
offset je větší než délka buffer.
nebo
offset plus count je větší než délka buffer.
Právě probíhá operace zápisu.
Tento objekt byl uzavřen.
K ověřování nedošlo.
Příklady
Následující příklad kódu ukazuje zápis do .NegotiateStream
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.");
}
Poznámky
Pokud je povolené šifrování, podepisování nebo šifrování a podepisování, tato metoda čte data z vyrovnávací paměti, šifruje, šifruje nebo šifruje a podepíše a přenáší je pomocí podkladového datového proudu. Pokud se nepoužívají žádné služby zabezpečení, jako je šifrování dat nebo podepisování, tato metoda vyvolá Write v podkladovém datovém proudu.
Tato metoda blokuje, zatímco se operace zápisu dokončí. Pokud chcete zabránit blokování během dokončení operace, použijte metodu WriteAsync .
Tuto metodu nelze volat, dokud nebudete úspěšně ověřeni. Ověření provedete voláním jedné z AuthenticateAsClientmetod , , AuthenticateAsClientAsyncBeginAuthenticateAsClientAuthenticateAsServer, , AuthenticateAsServerAsyncnebo BeginAuthenticateAsServer metod.
Třída NegotiateStream nepodporuje více souběžných operací zápisu. Pokud se pokusíte spustit operaci zápisu, zatímco jiná operace zápisu již probíhá ve stejném datovém proudu, NotSupportedException vyvolá se výjimka.