Udostępnij za pośrednictwem


Socket.EndReceive Metoda

Definicja

Kończy oczekujący odczyt asynchroniczny.

Przeciążenia

EndReceive(IAsyncResult)

Kończy oczekujący odczyt asynchroniczny.

EndReceive(IAsyncResult, SocketError)

Kończy oczekujący odczyt asynchroniczny.

EndReceive(IAsyncResult)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Kończy oczekujący odczyt asynchroniczny.

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

Parametry

asyncResult
IAsyncResult

Element IAsyncResult , który przechowuje informacje o stanie i wszystkie dane zdefiniowane przez użytkownika dla tej operacji asynchronicznej.

Zwraca

Liczba bajtów odebranych.

Wyjątki

asyncResult to null.

asyncResult nie został zwrócony przez wywołanie BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) metody .

EndReceive(IAsyncResult) został wcześniej wywołany do odczytu asynchronicznego.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

-lub-

Tylko platforma .NET 7+ : Socket została zamknięta.

tylko .NET Framework, .NET Core i .NET 5-6: Socket została zamknięta.

Uwagi

Ważne

Jest to interfejs API zgodności. Nie zalecamy używania metod APM (Begin* i End*) do nowego programowania. Zamiast tego należy użyć Taskodpowiedników opartych na protokole .

EndReceive kończy operację rozpoczętą przez BeginReceive. Musisz przekazać IAsyncResult utworzony przez odpowiednie BeginReceive wywołanie.

Metoda EndReceive będzie blokować, dopóki dane nie będą dostępne. Jeśli używasz protokołu bez połączenia, EndReceive odczytuje pierwszy w kolejce datagram dostępny w buforze sieci przychodzącej. Jeśli używasz protokołu zorientowanego na połączenie, EndReceive metoda odczytuje tyle danych, ile jest dostępnych do liczby bajtów określonych w size parametrze BeginReceive metody . Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, EndReceive metoda zakończy się natychmiast i zwróci zero bajtów.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod 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

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ż

Dotyczy

EndReceive(IAsyncResult, SocketError)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Kończy oczekujący odczyt asynchroniczny.

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

Parametry

asyncResult
IAsyncResult

Element IAsyncResult , który przechowuje informacje o stanie i wszystkie dane zdefiniowane przez użytkownika dla tej operacji asynchronicznej.

errorCode
SocketError

SocketError Obiekt, który przechowuje błąd gniazda.

Zwraca

Liczba bajtów odebranych.

Wyjątki

asyncResult to null.

asyncResult nie został zwrócony przez wywołanie BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) metody .

EndReceive(IAsyncResult) został wcześniej wywołany do odczytu asynchronicznego.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

-lub-

Tylko platforma .NET 7+ : Socket została zamknięta.

tylko .NET Framework, .NET Core i .NET 5-6: Socket została zamknięta.

Uwagi

Ważne

Jest to interfejs API zgodności. Nie zalecamy używania metod APM (Begin* i End*) do nowego programowania. Zamiast tego należy użyć Taskodpowiedników opartych na protokole .

EndReceive kończy operację rozpoczętą przez BeginReceive. Musisz przekazać IAsyncResult utworzony przez odpowiednie BeginReceive wywołanie.

Metoda EndReceive będzie blokować, dopóki dane nie będą dostępne. Jeśli używasz protokołu bez połączenia, EndReceive odczytuje pierwszy w kolejce datagram dostępny w buforze sieci przychodzącej. Jeśli używasz protokołu zorientowanego na połączenie, EndReceive metoda odczytuje tyle danych, ile jest dostępnych do liczby bajtów określonych w size parametrze BeginReceive metody . Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, EndReceive metoda zakończy się natychmiast i zwróci zero bajtów.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod 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

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ż

Dotyczy