Socket.EndSend Метод

Определение

Завершает отложенную операцию асинхронной передачи.

Перегрузки

EndSend(IAsyncResult)

Завершает отложенную операцию асинхронной передачи.

EndSend(IAsyncResult, SocketError)

Завершает отложенную операцию асинхронной передачи.

EndSend(IAsyncResult)

Завершает отложенную операцию асинхронной передачи.

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

Параметры

asyncResultresult
IAsyncResult

Объект IAsyncResult, хранящий сведения о состоянии этой асинхронной операции.

Возвращаемое значение

Int32

Если операция завершилась успешно — значение количества байтов, переданных в объект Socket; в противном случае — ошибка, указывающая на недопустимость объекта Socket.

Исключения

asyncResult имеет значение null.

Параметр asyncResult не был возвращен вызовом метода BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object).

Метод EndSend(IAsyncResult) был ранее вызван для асинхронной передачи.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Примеры

В следующем примере кода завершается отложенная асинхронная отправка.

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

Комментарии

EndSend завершает операцию асинхронной отправки, запущенную в BeginSend .

Перед вызовом необходимо BeginSend создать метод обратного вызова, который реализует AsyncCallback делегат. Этот метод обратного вызова выполняется в отдельном потоке и вызывается системой после BeginSend возврата. Метод обратного вызова должен принять значение, IAsyncResult возвращенное BeginSend методом в качестве параметра.

В методе обратного вызова вызовите AsyncState метод IAsyncResult параметра, чтобы получить отправку Socket . После получения объекта Socket можно вызвать EndSend метод для успешного завершения операции отправки и возврата числа отправленных байтов.

Если используется протокол без установления соединения, EndSend будет блокироваться до отправки датаграммы. При использовании протокола, ориентированного на соединение, EndSend блокируется до отправки некоторых буферов. Если возвращаемое значение из EndSend указывает, что буфер не был полностью отправлен, вызовите BeginSend метод еще раз, изменив буфер для хранения неотправленных данных.

Нет никакой гарантии, что отправленные данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение BeginSend метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Все операции ввода-вывода, инициированные данным потоком, отменяются при выходе из этого потока. Незавершенная асинхронная операция может завершиться ошибкой, если поток завершается до завершения операции.

Примечание

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

См. также раздел

Применяется к

EndSend(IAsyncResult, SocketError)

Завершает отложенную операцию асинхронной передачи.

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

Параметры

asyncResult
IAsyncResult

Объект IAsyncResult, хранящий сведения о состоянии этой асинхронной операции.

errorCode
SocketError

Объект SocketError, содержащий ошибку сокета.

Возвращаемое значение

Int32

Если операция завершилась успешно — значение количества байтов, переданных в объект Socket; в противном случае — ошибка, указывающая на недопустимость объекта Socket.

Исключения

asyncResult имеет значение null.

Параметр asyncResult не был возвращен вызовом метода BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object).

Метод EndSend(IAsyncResult) был ранее вызван для асинхронной передачи.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Комментарии

EndSend завершает операцию асинхронной отправки, запущенную в BeginSend .

Перед вызовом необходимо BeginSend создать метод обратного вызова, который реализует AsyncCallback делегат. Этот метод обратного вызова выполняется в отдельном потоке и вызывается системой после BeginSend возврата. Метод обратного вызова должен принять значение, IAsyncResult возвращенное BeginSend методом в качестве параметра.

В методе обратного вызова вызовите AsyncState метод IAsyncResult параметра, чтобы получить отправку Socket . После получения объекта Socket можно вызвать EndSend метод для успешного завершения операции отправки и возврата числа отправленных байтов.

Если используется протокол без установления соединения, EndSend будет блокироваться до отправки датаграммы. При использовании протокола, ориентированного на соединение, EndSend блокируется до отправки некоторых буферов. Если возвращаемое значение из EndSend указывает, что буфер не был полностью отправлен, вызовите BeginSend метод еще раз, изменив буфер для хранения неотправленных данных.

Нет никакой гарантии, что отправленные данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение BeginSend метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Все операции ввода-вывода, инициированные данным потоком, отменяются при выходе из этого потока. Незавершенная асинхронная операция может завершиться ошибкой, если поток завершается до завершения операции.

Примечание

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

См. также раздел

Применяется к