NegotiateStream.Write(Byte[], Int32, Int32) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Escreva o número de Bytes especificado no fluxo subjacente usando o buffer e o deslocamento especificados.
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)
Parâmetros
- offset
- Int32
Um Int32 local com base em zero no buffer qual começar a ler bytes a serem gravados no fluxo.
Exceções
buffer é null.
offset é menor que 0.
-ou-
offset é maior que o comprimento de buffer.
-ou-
offset a contagem de adição é maior que o comprimento de buffer.
Falha na operação de gravação.
-ou-
A criptografia está em uso, mas os dados não puderam ser criptografados.
Já há uma operação de gravação em andamento.
Este objeto foi fechado.
A autenticação não ocorreu.
Exemplos
O exemplo de código a seguir demonstra a gravação em um 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.");
}
Comentários
Se a criptografia, assinatura ou criptografia e assinatura estiverem habilitadas, esse método lerá os dados do buffer, criptografará, assinará ou criptografará e assinará e os transmitirá usando o fluxo subjacente. Se nenhum serviço de segurança, como criptografia de dados ou assinatura, estiver em uso, esse método invocará Write no fluxo subjacente.
Esse método é bloqueado enquanto a operação de gravação é concluída. Para evitar o bloqueio durante a conclusão da operação, use o WriteAsync método.
Você não pode chamar esse método até que tenha se autenticado com êxito. Para autenticar, chame um dos AuthenticateAsClientmétodos , , BeginAuthenticateAsClientAuthenticateAsClientAsync, AuthenticateAsServer, AuthenticateAsServerAsyncou BeginAuthenticateAsServer .
A NegotiateStream classe não dá suporte a várias operações de gravação simultâneas. Se você tentar iniciar uma operação de gravação enquanto outra operação de gravação já estiver em execução no mesmo fluxo, uma NotSupportedException exceção será gerada.