Condividi tramite


Socket.BeginReceiveFrom Metodo

Definizione

Inizia a ricevere i dati in modo asincrono da un dispositivo di rete specificato.

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

Parametri

buffer
Byte[]

Matrice di tipo Byte che rappresenta il percorso di archiviazione per i dati ricevuti.

offset
Int32

Posizione in base zero nel parametro in corrispondenza del buffer quale archiviare i dati.

size
Int32

Numero di byte da ricevere.

socketFlags
SocketFlags

Combinazione bit per bit dei SocketFlags valori.

remoteEP
EndPoint

Riferimento a uno EndPoint dello stesso tipo dell'endpoint dell'host remoto da aggiornare alla ricezione sincrona.

callback
AsyncCallback

Delegato AsyncCallback .

state
Object

Oggetto che contiene informazioni sullo stato per questa richiesta.

Restituisce

Oggetto IAsyncResult che fa riferimento alla lettura asincrona.

Eccezioni

buffer è null.

oppure

remoteEP è null.

Solo .NET Framework e .NET 5 e versioni precedenti: si è verificato un errore durante il tentativo di accesso al socket.

offset è minore di 0.

oppure

offset è maggiore della lunghezza di buffer.

oppure

size è minore di 0.

oppure

size è maggiore della lunghezza di buffer meno il valore del offset parametro.

L'oggetto Socket è stato chiuso.

Un chiamante superiore nello stack di chiamate non dispone dell'autorizzazione per l'operazione richiesta.

Commenti

Importante

Si tratta di un'API di compatibilità. Non è consigliabile usare i metodi APM (Begin* e End*) per nuovi sviluppi. Usare invece gli Taskequivalenti basati su .

È possibile passare un callback che implementa AsyncCallback a BeginReceiveFrom per ricevere una notifica sul completamento dell'operazione. Si noti che se lo stack di rete sottostante completa l'operazione in modo sincrono, il callback verrà eseguito inline, durante la chiamata a BeginReceiveFrom. In questo caso, la CompletedSynchronously proprietà sull'oggetto restituito verrà impostata IAsyncResult su true per indicare che il metodo è stato completato in modo sincrono. Utilizzare la AsyncState proprietà dell'oggetto IAsyncResult per ottenere l'oggetto di stato passato al BeginReceiveFrom metodo .

L'operazione asincrona BeginReceiveFrom deve essere completata chiamando il EndReceiveFrom metodo . In genere, il metodo viene richiamato dal AsyncCallback delegato. EndReceiveFrom blocca il thread chiamante fino al completamento dell'operazione.

Questo metodo legge i dati nel buffer parametro e acquisisce l'endpoint host remoto da cui vengono inviati i dati. Per informazioni su come recuperare questo endpoint, vedere EndReceiveFrom. Questo metodo è più utile se si prevede di ricevere in modo asincrono datagrammi senza connessione da un host sconosciuto o da più host. In questi casi, BeginReceiveFrom leggerà il primo datagramma accodato ricevuto nel buffer di rete locale. Se il datagramma ricevuto è maggiore delle dimensioni di buffer, il BeginReceiveFrom metodo riempirà buffer la maggior parte del messaggio possibile e genererà un'eccezione SocketException. Se si usa un protocollo inaffidabile, i dati in eccesso andranno persi. Se si usa un protocollo affidabile, i dati in eccesso verranno conservati dal provider di servizi e sarà possibile recuperarli chiamando il BeginReceiveFrom metodo con un buffer sufficientemente grande.

Per garantire che l'endpoint host remoto venga sempre restituito, un'applicazione deve associare Socket in modo esplicito a un endpoint locale usando il Bind metodo e quindi chiamare il SetSocketOption metodo con il optionLevel parametro impostato su IP o IPv6 in base alle esigenze, il optionName parametro impostato su PacketInformatione il optionValue parametro per abilitare questa opzione prima di chiamare il BeginReceiveFrom metodo . In caso contrario, è possibile che l'endpoint host remoto non venga restituito quando il mittente ha inviato un certo numero di datagrammi prima che il ricevitore abbia chiamato il BeginReceiveFrom metodo .

Anche se BeginReceiveFrom è destinato ai protocolli senza connessione, è possibile usare anche un protocollo orientato alla connessione. Se si sceglie di farlo, è prima necessario stabilire una connessione host remota chiamando il Connect / BeginConnect metodo o accettando una richiesta di connessione in ingresso chiamando il Accept metodo o BeginAccept . Se si chiama il BeginReceiveFrom metodo prima di stabilire o accettare una connessione, si otterrà un oggetto SocketException. È anche possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il BeginReceiveFrom metodo .

Parametro remoteEp

Con i socket orientati alla connessione, BeginReceiveFrom leggerà la quantità di dati disponibile fino al numero di byte specificato dal size parametro .

Per annullare un oggetto in sospeso BeginReceiveFrom, chiamare il Close metodo .

Annotazioni

Se si riceve un oggetto SocketException, utilizzare la SocketException.ErrorCode proprietà per ottenere il codice di errore specifico.

Annotazioni

Questo membro restituisce informazioni di traccia quando si abilita la traccia di rete nell'applicazione. Per altre informazioni, vedere Traccia di rete in .NET Framework.

Annotazioni

Il contesto di esecuzione ,ovvero il contesto di sicurezza, l'utente rappresentato e il contesto chiamante, viene memorizzato nella cache per i metodi asincroni Socket . Dopo il primo utilizzo di un contesto specifico (un metodo asincrono Socket specifico, un'istanza specifica Socket e un callback specifico), gli usi successivi di tale contesto vedranno un miglioramento delle prestazioni.

Si applica a

Vedi anche