Socket.EndSend Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Kończy oczekujące wysyłanie asynchroniczne.
Przeciążenia
| EndSend(IAsyncResult) |
Kończy oczekujące wysyłanie asynchroniczne. |
| EndSend(IAsyncResult, SocketError) |
Kończy oczekujące wysyłanie asynchroniczne. |
EndSend(IAsyncResult)
Kończy oczekujące wysyłanie asynchroniczne.
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
Parametry
- asyncResultresult
- IAsyncResult
Element IAsyncResult , który przechowuje informacje o stanie dla tej operacji asynchronicznej.
Zwraca
W przypadku powodzenia liczba bajtów wysłanych do obiektu Socket; w przeciwnym razie nieprawidłowy Socket błąd.
Wyjątki
asyncResult to null.
asyncResult nie został zwrócony przez wywołanie BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) metody .
EndSend(IAsyncResult) został wcześniej wywołany do wysyłania asynchronicznego.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Została zamknięta Socket .
Przykłady
Poniższy przykład kodu kończy oczekujące wysyłanie asynchroniczne.
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
Uwagi
EndSend kończy operację wysyłania asynchronicznego uruchomioną w pliku BeginSend.
Przed wywołaniem BeginSendmetody należy utworzyć metodę wywołania zwrotnego, która implementuje delegata AsyncCallback . Ta metoda wywołania zwrotnego jest wykonywana w osobnym wątku i jest wywoływana przez system po BeginSend powrocie. Metoda wywołania zwrotnego musi akceptować IAsyncResult zwracane przez BeginSend metodę jako parametr.
W metodzie wywołania zwrotnego wywołaj AsyncState metodę parametru IAsyncResult , aby uzyskać element wysyłający Socket. Po uzyskaniu metody można wywołać EndSend metodę Socket, aby pomyślnie ukończyć operację wysyłania i zwrócić liczbę wysłanych bajtów.
Jeśli używasz protokołu bez połączenia, EndSend zablokuje się do momentu wysłania datagramu. Jeśli używasz protokołu zorientowanego na połączenie, EndSend zablokuje do momentu wysłania części buforu. Jeśli wartość zwracana z EndSend wskazuje, że bufor nie został całkowicie wysłany, wywołaj BeginSend metodę ponownie, modyfikując bufor w celu przechowywania nieuprzyjanych danych.
Nie ma gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie BeginSend metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu.
Uwaga
Wszystkie operacje we/wy inicjowane przez dany wątek są anulowane po zakończeniu tego wątku. Oczekująca operacja asynchroniczna może zakończyć się niepowodzeniem, jeśli wątek zakończy się przed zakończeniem operacji.
Uwaga
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Zobacz też
- BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)
- AsyncCallback
- AsyncState
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- NoDelay
Dotyczy
EndSend(IAsyncResult, SocketError)
Kończy oczekujące wysyłanie asynchroniczne.
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
Parametry
- asyncResult
- IAsyncResult
Element IAsyncResult , który przechowuje informacje o stanie dla tej operacji asynchronicznej.
- errorCode
- SocketError
SocketError Obiekt, który przechowuje błąd gniazda.
Zwraca
W przypadku powodzenia liczba bajtów wysłanych do obiektu Socket; w przeciwnym razie nieprawidłowy Socket błąd.
Wyjątki
asyncResult to null.
asyncResult nie został zwrócony przez wywołanie BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) metody .
EndSend(IAsyncResult) został wcześniej wywołany do wysyłania asynchronicznego.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Została zamknięta Socket .
Uwagi
EndSend kończy operację wysyłania asynchronicznego uruchomioną w pliku BeginSend.
Przed wywołaniem BeginSendmetody należy utworzyć metodę wywołania zwrotnego, która implementuje delegata AsyncCallback . Ta metoda wywołania zwrotnego jest wykonywana w osobnym wątku i jest wywoływana przez system po BeginSend powrocie. Metoda wywołania zwrotnego musi akceptować IAsyncResult zwracane przez BeginSend metodę jako parametr.
W metodzie wywołania zwrotnego wywołaj AsyncState metodę parametru IAsyncResult , aby uzyskać element wysyłający Socket. Po uzyskaniu metody można wywołać EndSend metodę Socket, aby pomyślnie ukończyć operację wysyłania i zwrócić liczbę wysłanych bajtów.
Jeśli używasz protokołu bez połączenia, EndSend zablokuje się do momentu wysłania datagramu. Jeśli używasz protokołu zorientowanego na połączenie, EndSend zablokuje do momentu wysłania części buforu. Jeśli wartość zwracana z EndSend wskazuje, że bufor nie został całkowicie wysłany, wywołaj BeginSend metodę ponownie, modyfikując bufor w celu przechowywania nieuprzyjanych danych.
Nie ma gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie BeginSend metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu.
Uwaga
Wszystkie operacje we/wy inicjowane przez dany wątek są anulowane po zakończeniu tego wątku. Oczekująca operacja asynchroniczna może zakończyć się niepowodzeniem, jeśli wątek zakończy się przed zakończeniem operacji.
Uwaga
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Zobacz też
- BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)
- AsyncCallback
- AsyncState
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- NoDelay