Socket.EndSend Método

Definição

Encerra um envio assíncrono pendente.Ends a pending asynchronous send.

Sobrecargas

EndSend(IAsyncResult)

Encerra um envio assíncrono pendente.Ends a pending asynchronous send.

EndSend(IAsyncResult, SocketError)

Encerra um envio assíncrono pendente.Ends a pending asynchronous send.

EndSend(IAsyncResult)

Encerra um envio assíncrono pendente.Ends a pending asynchronous send.

public:
 int EndSend(IAsyncResult ^ asyncResult);
public:
 int EndSend(IAsyncResult ^ result);
public int EndSend (IAsyncResult asyncResult);
public int EndSend (IAsyncResult result);
member this.EndSend : IAsyncResult -> int
member this.EndSend : IAsyncResult -> int
Public Function EndSend (asyncResult As IAsyncResult) As Integer
Public Function EndSend (result As IAsyncResult) As Integer

Parâmetros

asyncResultresult
IAsyncResult

Um IAsyncResult que armazena as informações de estado dessa operação assíncrona.An IAsyncResult that stores state information for this asynchronous operation.

Retornos

Int32

Se for bem-sucedido, o número de bytes enviados para o Socket; caso contrário, um erro Socket inválido.If successful, the number of bytes sent to the Socket; otherwise, an invalid Socket error.

Exceções

asyncResult é null.asyncResult is null.

asyncResult não foi retornado por uma chamada ao método BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object).asyncResult was not returned by a call to the BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) method.

O EndSend(IAsyncResult) foi chamado anteriormente para o envio assíncrono.EndSend(IAsyncResult) was previously called for the asynchronous send.

Ocorreu um erro ao tentar acessar o soquete.An error occurred when attempting to access the socket.

O Socket foi fechado.The Socket has been closed.

Exemplos

O exemplo de código a seguir Finaliza um envio assíncrono pendente.The following code example ends a pending asynchronous send.

StateObject^ so = safe_cast<StateObject^>(ar->AsyncState);
Socket^ s = so->workSocket;

int send = s->EndSend( ar );

Console::WriteLine( "The size of the message sent was : {0}", send );

s->Close();
StateObject so = (StateObject) ar.AsyncState;
Socket s = so.workSocket;

int send = s.EndSend(ar);

   Console.WriteLine("The size of the message sent was :" + send.ToString());

s.Close();
Public Shared Sub Send_Callback(ar As IAsyncResult)

   Dim so As StateObject = CType(ar.AsyncState, StateObject)
   Dim s As Socket = so.workSocket
   
   Dim send As Integer = s.EndSend(ar)
   
   Console.WriteLine(("The size of the message sent was :" + send.ToString()))
   
   s.Close()
End Sub

Comentários

EndSend conclui a operação de envio assíncrono iniciada em BeginSend .EndSend completes the asynchronous send operation started in BeginSend.

Antes de chamar BeginSend , você precisa criar um método de retorno de chamada que implemente o AsyncCallback delegado.Before calling BeginSend, you need to create a callback method that implements the AsyncCallback delegate. Esse método de retorno de chamada é executado em um thread separado e é chamado pelo sistema após o BeginSend retornos.This callback method executes in a separate thread and is called by the system after BeginSend returns. O método de retorno de chamada deve aceitar o IAsyncResult retornado pelo BeginSend método como um parâmetro.The callback method must accept the IAsyncResult returned by the BeginSend method as a parameter.

No método de retorno de chamada, chame o AsyncState método do IAsyncResult parâmetro para obter o envio Socket .Within the callback method, call the AsyncState method of the IAsyncResult parameter to obtain the sending Socket. Depois de obter o Socket , você pode chamar o EndSend método para concluir com êxito a operação de envio e retornar o número de bytes enviados.After obtaining the Socket, you can call the EndSend method to successfully complete the send operation and return the number of bytes sent.

Se você estiver usando um protocolo sem conexão, EndSend o será bloqueado até que o datagrama seja enviado.If you are using a connectionless protocol, EndSend will block until the datagram is sent. Se você estiver usando um protocolo orientado a conexão, o EndSend será bloqueado até que parte do buffer seja enviada.If you are using a connection-oriented protocol, EndSend will block until some of the buffer was sent. Se o valor de retorno de EndSend indicar que o buffer não foi enviado por completo, chame o BeginSend método novamente, modificando o buffer para manter os dados não enviados.If the return value from EndSend indicates that the buffer was not completely sent, call the BeginSend method again, modifying the buffer to hold the unsent data.

Não há nenhuma garantia de que os dados que você enviar aparecerão na rede imediatamente.There is no guarantee that the data you send will appear on the network immediately. Para aumentar a eficiência da rede, o sistema subjacente pode atrasar a transmissão até que uma quantidade significativa de dados de saída seja coletada.To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. Uma conclusão bem-sucedida do BeginSend método significa que o sistema subjacente tinha espaço para armazenar em buffer os dados de um envio de rede.A successful completion of the BeginSend method means that the underlying system has had room to buffer your data for a network send.

Observação

Se você receber um SocketException , use a SocketException.ErrorCode propriedade para obter o código de erro específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. Depois de obter esse código, consulte a documentação do código de erro da API do Windows Sockets versão 2 para obter uma descrição detalhada do erro.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Observação

Todas as e/s iniciadas por um determinado thread são canceladas quando o thread é encerrado.All I/O initiated by a given thread is canceled when that thread exits. Uma operação assíncrona pendente poderá falhar se o thread sair antes da conclusão da operação.A pending asynchronous operation can fail if the thread exits before the operation completes.

Observação

A conclusão bem-sucedida de um envio não indica que os dados foram entregues com êxito.The successful completion of a send does not indicate that the data was successfully delivered. Se nenhum espaço de buffer estiver disponível no sistema de transporte para manter os dados a serem transmitidos, o envio será bloqueado, a menos que o soquete tenha sido colocado no modo de não bloqueio.If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

Observação

Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo.This member outputs trace information when you enable network tracing in your application. Para obter mais informações, consulte rastreamento de rede na .NET Framework.For more information, see Network Tracing in the .NET Framework.

Confira também

Aplica-se a

EndSend(IAsyncResult, SocketError)

Encerra um envio assíncrono pendente.Ends a pending asynchronous send.

public:
 int EndSend(IAsyncResult ^ asyncResult, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int EndSend (IAsyncResult asyncResult, out System.Net.Sockets.SocketError errorCode);
member this.EndSend : IAsyncResult * SocketError -> int
Public Function EndSend (asyncResult As IAsyncResult, ByRef errorCode As SocketError) As Integer

Parâmetros

asyncResult
IAsyncResult

Um IAsyncResult que armazena as informações de estado dessa operação assíncrona.An IAsyncResult that stores state information for this asynchronous operation.

errorCode
SocketError

Um objeto SocketError que armazena o erro de soquete.A SocketError object that stores the socket error.

Retornos

Int32

Se for bem-sucedido, o número de bytes enviados para o Socket; caso contrário, um erro Socket inválido.If successful, the number of bytes sent to the Socket; otherwise, an invalid Socket error.

Exceções

asyncResult é null.asyncResult is null.

asyncResult não foi retornado por uma chamada ao método BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object).asyncResult was not returned by a call to the BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) method.

O EndSend(IAsyncResult) foi chamado anteriormente para o envio assíncrono.EndSend(IAsyncResult) was previously called for the asynchronous send.

Ocorreu um erro ao tentar acessar o soquete.An error occurred when attempting to access the socket.

O Socket foi fechado.The Socket has been closed.

Comentários

EndSend conclui a operação de envio assíncrono iniciada em BeginSend .EndSend completes the asynchronous send operation started in BeginSend.

Antes de chamar BeginSend , você precisa criar um método de retorno de chamada que implemente o AsyncCallback delegado.Before calling BeginSend, you need to create a callback method that implements the AsyncCallback delegate. Esse método de retorno de chamada é executado em um thread separado e é chamado pelo sistema após o BeginSend retornos.This callback method executes in a separate thread and is called by the system after BeginSend returns. O método de retorno de chamada deve aceitar o IAsyncResult retornado pelo BeginSend método como um parâmetro.The callback method must accept the IAsyncResult returned by the BeginSend method as a parameter.

No método de retorno de chamada, chame o AsyncState método do IAsyncResult parâmetro para obter o envio Socket .Within the callback method, call the AsyncState method of the IAsyncResult parameter to obtain the sending Socket. Depois de obter o Socket , você pode chamar o EndSend método para concluir com êxito a operação de envio e retornar o número de bytes enviados.After obtaining the Socket, you can call the EndSend method to successfully complete the send operation and return the number of bytes sent.

Se você estiver usando um protocolo sem conexão, EndSend o será bloqueado até que o datagrama seja enviado.If you are using a connectionless protocol, EndSend will block until the datagram is sent. Se você estiver usando um protocolo orientado a conexão, o EndSend será bloqueado até que parte do buffer seja enviada.If you are using a connection-oriented protocol, EndSend will block until some of the buffer was sent. Se o valor de retorno de EndSend indicar que o buffer não foi enviado por completo, chame o BeginSend método novamente, modificando o buffer para manter os dados não enviados.If the return value from EndSend indicates that the buffer was not completely sent, call the BeginSend method again, modifying the buffer to hold the unsent data.

Não há nenhuma garantia de que os dados que você enviar aparecerão na rede imediatamente.There is no guarantee that the data you send will appear on the network immediately. Para aumentar a eficiência da rede, o sistema subjacente pode atrasar a transmissão até que uma quantidade significativa de dados de saída seja coletada.To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. Uma conclusão bem-sucedida do BeginSend método significa que o sistema subjacente tinha espaço para armazenar em buffer os dados de um envio de rede.A successful completion of the BeginSend method means that the underlying system has had room to buffer your data for a network send.

Observação

Se você receber um SocketException , use a SocketException.ErrorCode propriedade para obter o código de erro específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. Depois de obter esse código, consulte a documentação do código de erro da API do Windows Sockets versão 2 para obter uma descrição detalhada do erro.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Observação

Todas as e/s iniciadas por um determinado thread são canceladas quando o thread é encerrado.All I/O initiated by a given thread is canceled when that thread exits. Uma operação assíncrona pendente poderá falhar se o thread sair antes da conclusão da operação.A pending asynchronous operation can fail if the thread exits before the operation completes.

Observação

A conclusão bem-sucedida de um envio não indica que os dados foram entregues com êxito.The successful completion of a send does not indicate that the data was successfully delivered. Se nenhum espaço de buffer estiver disponível no sistema de transporte para manter os dados a serem transmitidos, o envio será bloqueado, a menos que o soquete tenha sido colocado no modo de não bloqueio.If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

Observação

Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo.This member outputs trace information when you enable network tracing in your application. Para obter mais informações, consulte rastreamento de rede na .NET Framework.For more information, see Network Tracing in the .NET Framework.

Confira também

Aplica-se a