Socket.BeginReceiveFrom Metoda

Definicja

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

buffer
Byte[]

Tablica typu Byte , która jest lokalizacją przechowywania odebranych danych.

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

buffer to null.

-lub-

remoteEP to null.

.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-

offsetjest 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 Taskparametrach .

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.

Dotyczy

Zobacz też