Socket.BeginReceiveFrom 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.
Rozpoczyna asynchronicznie odbierać dane z określonego urządzenia sieciowego.
public:
IAsyncResult ^ BeginReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult
Parametry
- offset
- Int32
Położenie na podstawie zera w parametrze buffer
, w którym mają być przechowywane dane.
- size
- Int32
Liczba bajtów do odebrania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
- remoteEP
- EndPoint
Odwołanie do EndPoint tego samego typu co punkt końcowy hosta zdalnego do zaktualizowania w przypadku synchronicznego odbierania.
- callback
- AsyncCallback
Delegat AsyncCallback .
- state
- Object
Obiekt zawierający informacje o stanie dla tego żądania.
Zwraca
Element IAsyncResult , który odwołuje się do odczytu asynchronicznego.
Wyjątki
.NET Framework i .NET 5 i starszych tylko: wystąpił błąd podczas próby uzyskania dostępu do gniazda.
offset
wartość jest mniejsza niż 0.
-lub-
offset
jest większa niż długość .buffer
-lub-
size
wartość jest mniejsza niż 0.
-lub-
size
jest większa niż długość buffer
odmętą wartości parametru offset
.
Element Socket został zamknięty.
Obiekt wywołujący wyżej w stosie wywołań nie ma uprawnień do żądanej operacji.
Uwagi
Ważne
Jest to interfejs API zgodności. Nie zalecamy używania metod APM (Begin*
i End*
) do tworzenia nowych rozwiązań. Zamiast tego należy użyć odpowiedników opartych na Task
parametrach .
Możesz przekazać wywołanie zwrotne implementujące AsyncCallback element , aby BeginReceiveFrom otrzymywać powiadomienia o zakończeniu operacji. Należy pamiętać, że jeśli bazowy stos sieciowy ukończy operację synchronicznie, wywołanie zwrotne zostanie wykonane w tekście podczas wywołania metody BeginReceiveFrom. W takim przypadku właściwość zwrócona IAsyncResult zostanie ustawiona na wartość , aby wskazaćtrue
, CompletedSynchronously że metoda została ukończona synchronicznie.
AsyncState Użyj właściwości , IAsyncResult aby uzyskać obiekt stanu przekazany do BeginReceiveFrom metody .
Operacja asynchroniczna musi zostać ukończona BeginReceiveFrom przez wywołanie EndReceiveFrom metody . Zazwyczaj metoda jest wywoływana przez delegata AsyncCallback . EndReceiveFrom Zablokuje wątek wywołujący do momentu ukończenia operacji.
Ta metoda odczytuje dane do parametru buffer
i przechwytuje zdalny punkt końcowy hosta, z którego są wysyłane dane. Aby uzyskać informacje na temat pobierania tego punktu końcowego, zobacz EndReceiveFrom. Ta metoda jest najbardziej przydatna, jeśli zamierzasz asynchronicznie odbierać bez połączenia datagramy z nieznanego hosta lub wielu hostów. W takich przypadkach BeginReceiveFrom odczytuje pierwszy w kolejce datagram otrzymany do buforu sieci lokalnej. Jeśli otrzymany datagram jest większy niż rozmiar buffer
, metoda wypełni buffer
maksymalną część komunikatu, jak to możliwe, i zgłosi wartość SocketExceptionBeginReceiveFrom . Jeśli używasz zawodnego protokołu, nadmiar danych zostanie utracony. Jeśli używasz niezawodnego protokołu, nadmiar danych zostanie zachowany przez dostawcę usług i można go pobrać, wywołując BeginReceiveFrom metodę z wystarczająco dużym buforem.
Aby zagwarantować, że punkt końcowy hosta zdalnego jest zawsze zwracany, aplikacja powinna jawnie powiązać Socket element z lokalnym punktem końcowym przy użyciu Bind metody , a następnie wywołać SetSocketOption metodę z parametrem optionLevel
ustawionym na IP wartość lub IPv6 zgodnie z potrzebami, optionName
parametr ustawiony na PacketInformation, i optionValue
parametr, aby włączyć tę opcję przed wywołaniem BeginReceiveFrom metody. W przeciwnym razie istnieje możliwość, aby zdalny punkt końcowy hosta nie był zwracany, gdy nadawca wysłał kilka datagramów przed wywołaniem metody przez odbiorcę BeginReceiveFrom .
Chociaż BeginReceiveFrom jest przeznaczony dla protokołów bez połączenia, można również użyć protokołu zorientowanego na połączenie. Jeśli zdecydujesz się to zrobić, musisz najpierw ustanowić połączenie hosta zdalnego przez wywołanie Connect / BeginConnect metody lub zaakceptować przychodzące żądanie połączenia przez wywołanie Accept metody or.BeginAccept Jeśli wywołasz metodę BeginReceiveFrom przed nawiązaniem lub zaakceptowaniem połączenia, otrzymasz element SocketException. Możesz również ustanowić domyślnego hosta zdalnego dla protokołu bez połączenia przed wywołaniem BeginReceiveFrom metody .
Parametr remoteEp
W przypadku gniazd zorientowanych na połączenie odczytuje tyle danych, BeginReceiveFrom ile jest dostępnych do liczby bajtów określonych przez size
parametr .
Aby anulować oczekujący BeginReceiveFromelement , wywołaj metodę Close .
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu.
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.
Uwaga
Kontekst wykonywania (kontekst zabezpieczeń, personifikowany użytkownik i kontekst wywołujący) jest buforowany dla metod asynchronicznych Socket . Po pierwszym użyciu określonego kontekstu (konkretnej metody asynchronicznej Socket , określonego wystąpienia i określonego Socket wywołania zwrotnego), kolejne zastosowania tego kontekstu zobaczą poprawę wydajności.