Socket.BeginReceiveFrom Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Begint asynchroon gegevens te ontvangen van een opgegeven netwerkapparaat.
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);
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
Parameters
- offset
- Int32
De op nul gebaseerde positie in de buffer parameter waarop de gegevens moeten worden opgeslagen.
- size
- Int32
Het aantal te ontvangen bytes.
- socketFlags
- SocketFlags
Een bitsgewijze combinatie van de SocketFlags waarden.
- remoteEP
- EndPoint
Een verwijzing naar een EndPoint van hetzelfde type als het eindpunt van de externe host die moet worden bijgewerkt bij synchrone ontvangst.
- callback
- AsyncCallback
De AsyncCallback gedelegeerde.
- state
- Object
Een object met statusinformatie voor deze aanvraag.
Retouren
Een IAsyncResult die verwijst naar de asynchrone leesbewerking.
Uitzonderingen
alleen .NET Framework: er is een fout opgetreden bij het openen van de socket.
offset is kleiner dan 0.
– of –
offset is groter dan de lengte van buffer.
– of –
size is kleiner dan 0.
– of –
size is groter dan de lengte van buffer min de waarde van de offset parameter.
De Socket is gesloten.
Een aanroeper hoger in de aanroepstack heeft geen machtiging voor de aangevraagde bewerking.
Opmerkingen
Important
Dit is een compatibiliteits-API. Het wordt afgeraden om de APM - (Begin* en End*) methoden voor nieuwe ontwikkeling te gebruiken. Gebruik in plaats daarvan de Taskequivalenten op basis van -.
U kunt een callback doorgeven waarnaar wordt geïmplementeerd AsyncCallbackBeginReceiveFrom om een melding te ontvangen over de voltooiing van de bewerking. Houd er rekening mee dat als de onderliggende netwerkstack de bewerking synchroon voltooit, de callback inline wordt uitgevoerd, tijdens de aanroep naar BeginReceiveFrom. In dit geval wordt de CompletedSynchronously eigenschap op de geretourneerde IAsyncResult waarde ingesteld om aan te true geven dat de methode synchroon is voltooid. Gebruik de AsyncState eigenschap van de IAsyncResult functie om het statusobject te verkrijgen dat is doorgegeven aan de BeginReceiveFrom methode.
De asynchrone BeginReceiveFrom bewerking moet worden voltooid door de EndReceiveFrom methode aan te roepen. Normaal gesproken wordt de methode aangeroepen door de AsyncCallback gemachtigde. EndReceiveFrom blokkeert de aanroepende thread totdat de bewerking is voltooid.
Met deze methode worden gegevens in de buffer parameter gelezen en wordt het eindpunt van de externe host vastgelegd waaruit de gegevens worden verzonden. Raadpleeg EndReceiveFromvoor meer informatie over het ophalen van dit eindpunt. Deze methode is het handigst als u asynchroon verbindingloze datagrammen van een onbekende host of meerdere hosts wilt ontvangen. In deze gevallen BeginReceiveFrom leest u het eerste enqueued datagram dat in de lokale netwerkbuffer is ontvangen. Als het datagram dat u ontvangt groter is dan de grootte, bufferzal de BeginReceiveFrom methode zoveel mogelijk van het bericht vullen buffer en een SocketException. Als u een onbetrouwbaar protocol gebruikt, gaan de overtollige gegevens verloren. Als u een betrouwbaar protocol gebruikt, worden de overtollige gegevens bewaard door de serviceprovider en kunt u deze ophalen door de BeginReceiveFrom methode aan te roepen met een grote buffer.
Om ervoor te zorgen dat het eindpunt van de externe host altijd wordt geretourneerd, moet een toepassing het Socket expliciet verbinden met een lokaal eindpunt met behulp van de Bind methode en vervolgens de SetSocketOption methode aanroepen met de optionLevel parameter die is ingesteld IP op of IPv6 indien van toepassing, de optionName parameter ingesteld PacketInformationop en de optionValue parameter om deze optie in te schakelen voordat de BeginReceiveFrom methode wordt aangeroepen. Anders is het mogelijk dat het eindpunt van de externe host niet wordt geretourneerd wanneer de afzender een aantal gegevensgrammen heeft verzonden voordat de ontvanger de BeginReceiveFrom methode heeft aangeroepen.
Hoewel BeginReceiveFrom het bedoeld is voor verbindingsloze protocollen, kunt u ook een verbindingsgeoriënteerd protocol gebruiken. Als u ervoor kiest om dit te doen, moet u eerst een externe hostverbinding tot stand brengen door de Connect / BeginConnect methode aan te roepen of een binnenkomende verbindingsaanvraag te accepteren door de of BeginAccept methode aan te Accept roepen. Als u de BeginReceiveFrom methode aanroept voordat u een verbinding tot stand brengt of accepteert, krijgt u een SocketException. U kunt ook een standaard externe host instellen voor een verbindingsloos protocol voordat u de BeginReceiveFrom methode aanroept.
De remoteEp parameter
Met verbindingsgeoriënteerde sockets BeginReceiveFrom worden zoveel gegevens gelezen als beschikbaar is tot het aantal bytes dat is opgegeven door de size parameter.
Als u een in behandeling zijnde BeginReceiveFrombewerking wilt annuleren, roept u de methode aan Close .
Note
Als u een SocketExceptionontvangt, gebruikt u de SocketException.ErrorCode eigenschap om de specifieke foutcode te verkrijgen.
Note
Dit lid voert traceringsgegevens uit wanneer u netwerktracering inschakelt in uw toepassing. Zie Network Tracing in .NET Framework voor meer informatie.
Note
De uitvoeringscontext (de beveiligingscontext, de geïmiteerde gebruiker en de aanroepende context) wordt in de cache opgeslagen voor de asynchrone Socket methoden. Na het eerste gebruik van een bepaalde context (een specifieke asynchrone Socket methode, een specifiek Socket exemplaar en een specifieke callback), zien volgende toepassingen van die context een prestatieverbetering.