다음을 통해 공유


NegotiateStream.BeginWrite 메서드

정의

지정된 버퍼에서 스트림에 Byte를 쓰는 비동기 쓰기 작업을 시작합니다.

public:
 override IAsyncResult ^ BeginWrite(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ asyncCallback, System::Object ^ asyncState);
public override IAsyncResult BeginWrite (byte[] buffer, int offset, int count, AsyncCallback? asyncCallback, object? asyncState);
public override IAsyncResult BeginWrite (byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState);
override this.BeginWrite : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginWrite (buffer As Byte(), offset As Integer, count As Integer, asyncCallback As AsyncCallback, asyncState As Object) As IAsyncResult

매개 변수

buffer
Byte[]

스트림에 쓸 바이트를 제공하는 Byte 배열입니다.

offset
Int32

스트림에 쓸 바이트를 읽기 시작하는, buffer 내의 0부터 시작하는 위치입니다.

count
Int32

buffer에서 읽을 바이트 수를 지정하는 Int32 값입니다.

asyncCallback
AsyncCallback

쓰기 작업이 완료되었을 때 호출할 메서드를 참조하는 AsyncCallback 대리자입니다.

asyncState
Object

쓰기 작업에 대한 정보가 포함된 사용자 정의 개체입니다. 작업이 완료되면 asyncCallback 대리자에게 전달되는 개체입니다.

반환

비동기 작업의 상태를 표시하는 IAsyncResult 개체입니다.

예외

buffer이(가) null인 경우

offset is less than 0.

또는

offsetbuffer의 길이보다 큽니다.

또는

offset과 count의 합이 buffer의 길이보다 큰 경우.

쓰기 작업이 실패했습니다.

또는

암호화를 사용 중이지만 데이터를 암호화할 수 없는 경우.

쓰기 작업을 진행 중인 경우

이 개체가 닫힌 경우.

인증이 수행되지 않은 경우.

예제

다음 예제에서는 비동기 쓰기 작업을 시작하는 방법을 보여 줍니다.

// Request authentication.
NetworkStream^ clientStream = client->GetStream();
NegotiateStream^ authStream = gcnew NegotiateStream( clientStream,false );

// Pass the NegotiateStream as the AsyncState object 
// so that it is available to the callback delegate.
IAsyncResult^ ar = authStream->BeginAuthenticateAsClient( gcnew AsyncCallback( EndAuthenticateCallback ), authStream );

Console::WriteLine( L"Client waiting for authentication..." );

// Wait until the result is available.
ar->AsyncWaitHandle->WaitOne();

// Display the properties of the authenticated stream.
AuthenticatedStreamReporter::DisplayProperties( authStream );

// Send a message to the server.
// Encode the test data into a byte array.
array<Byte>^message = Encoding::UTF8->GetBytes( L"Hello from the client." );
ar = authStream->BeginWrite( message, 0, message->Length, gcnew AsyncCallback( EndWriteCallback ), authStream );

// Request authentication.
NetworkStream clientStream = client.GetStream();
NegotiateStream authStream = new NegotiateStream(clientStream, false);
// Pass the NegotiateStream as the AsyncState object
// so that it is available to the callback delegate.
Task authenticateTask = authStream
    .AuthenticateAsClientAsync()
    .ContinueWith(task =>
    {
        Console.WriteLine("Client ending authentication...");
        Console.WriteLine("ImpersonationLevel: {0}", authStream.ImpersonationLevel);
    });

Console.WriteLine("Client waiting for authentication...");
// Wait until the result is available.
authenticateTask.Wait();
// Display the properties of the authenticated stream.
AuthenticatedStreamReporter.DisplayProperties(authStream);
// Send a message to the server.
// Encode the test data into a byte array.
byte[] message = Encoding.UTF8.GetBytes("Hello from the client.");
Task writeTask = authStream
    .WriteAsync(message, 0, message.Length)
    .ContinueWith(task =>
    {
        Console.WriteLine("Client ending write operation...");
    });

' Request authentication.
Dim clientStream = client.GetStream()
Dim authStream As New NegotiateStream(clientStream, False)

' Pass the NegotiateStream as the AsyncState object 
' so that it is available to the callback delegate.
Dim ar = authStream.BeginAuthenticateAsClient(
    New AsyncCallback(AddressOf EndAuthenticateCallback), authStream)

Console.WriteLine("Client waiting for authentication...")

' Wait until the result is available.
ar.AsyncWaitHandle.WaitOne()

' Display the properties of the authenticated stream.
AuthenticatedStreamReporter.DisplayProperties(authStream)

' Send a message to the server.
' Encode the test data into a byte array.
Dim message = Encoding.UTF8.GetBytes("Hello from the client.")
ar = authStream.BeginWrite(message, 0, message.Length, 
    New AsyncCallback(AddressOf EndWriteCallback), authStream)

작업이 완료되면 다음 메서드가 호출됩니다.

// The following method is called when the write operation completes.
static void EndWriteCallback( IAsyncResult^ ar )
{
   Console::WriteLine( L"Client ending write operation..." );
   NegotiateStream^ authStream = dynamic_cast<NegotiateStream^>(ar->AsyncState);
   
   // End the asynchronous operation.
   authStream->EndWrite( ar );
}

' The following method is called when the write operation completes.
Public Shared Sub EndWriteCallback(ar As IAsyncResult)

    Console.WriteLine("Client ending write operation...")
    Dim authStream = CType(ar.AsyncState, NegotiateStream)

    ' End the asynchronous operation.
    authStream.EndWrite(ar)

End Sub

설명

암호화, 서명 또는 암호화 및 서명을 사용하는 경우 이 메서드는 버퍼에서 데이터를 읽고, 암호화, 서명 또는 암호화하고, 서명하고, 기본 스트림을 사용하여 전송합니다. 데이터 암호화 또는 서명과 같은 보안 서비스를 사용하지 않는 경우 이 메서드는 기본 스트림에서 비동기 쓰기 작업을 시작합니다.

이 메서드는 비동기이며 작업이 완료되는 동안 차단되지 않습니다. 작업이 완료될 때까지 차단하려면 메서드를 Read 사용합니다.

메서드를 호출 EndWrite 하여 비동기 읽기 작업을 완료해야 합니다. 일반적으로 메서드는 대리자에서 호출됩니다 asyncCallback . 비동기 프로그래밍 모델 사용에 대한 자세한 내용은 동기 메서드 비동기 호출을 참조하세요.

클래스는 NegotiateStream 여러 동시 쓰기 작업을 지원하지 않습니다. 다른 쓰기 작업이 동일한 스트림에서 이미 실행되는 동안 쓰기 작업을 시작하려고 하면 예외가 NotSupportedException throw됩니다.

성공적으로 인증될 때까지 이 메서드를 호출할 수 없습니다. 인증하려면 , , , AuthenticateAsClientAsync, AuthenticateAsServerAsyncBeginAuthenticateAsClientAuthenticateAsServer또는 BeginAuthenticateAsServer 메서드 중 AuthenticateAsClient하나를 호출합니다.

적용 대상