Condividi tramite


Socket.BeginSendTo Metodo

Definizione

Invia i dati in modo asincrono a un host remoto specifico.

public:
 IAsyncResult ^ BeginSendTo(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 BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginSendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginSendTo (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult

Parametri

buffer
Byte[]

Matrice di tipo Byte che contiene i dati da inviare.

offset
Int32

Posizione in base zero nel buffer in corrispondenza della quale iniziare a inviare dati.

size
Int32

Numero di byte da inviare.

socketFlags
SocketFlags

Combinazione bit per bit dei valori di SocketFlags.

remoteEP
EndPoint

Oggetto EndPoint che rappresenta il dispositivo remoto.

callback
AsyncCallback

Delegato AsyncCallback.

state
Object

Oggetto che contiene informazioni sullo stato per questa richiesta.

Restituisce

Oggetto IAsyncResult che fa riferimento all'invio asincrono.

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

L'oggetto Socket è stato chiuso.

Un chiamante di livello superiore nello stack di chiamate non ha l'autorizzazione per l'operazione richiesta.

Commenti

Importante

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

È possibile passare un callback che implementa AsyncCallback a BeginSendTo 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 BeginSendTo. In questo caso, la CompletedSynchronously proprietà sul restituito verrà impostata IAsyncResult su per true indicare che il metodo è stato completato in modo sincrono. Utilizzare la AsyncState proprietà dell'oggetto IAsyncResult per ottenere l'oggetto state passato al BeginSendTo metodo .

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

Se si usa un protocollo orientato alla connessione, è prima necessario chiamare il Connectmetodo , BeginConnectAccept, o BeginAccept oppure BeginSendTo generare un SocketExceptionoggetto . BeginSendTo ignorerà il remoteEP parametro e invierà i dati all'oggetto EndPointConnectstabilito nel metodo , BeginConnect, Accepto BeginAccept .

Se si usa un protocollo senza connessione, non è necessario stabilire un host remoto predefinito con il Connect metodo o BeginConnect prima di chiamare SendTo. È necessario eseguire questa operazione solo se si intende chiamare il BeginSend metodo. Se si chiama il Connect metodo o BeginConnect prima di chiamare SendTo, il remoteEP parametro eseguirà l'override dell'host remoto predefinito specificato solo per tale operazione di invio. Non è inoltre necessario chiamare il Bind metodo. In questo caso, il provider di servizi sottostante assegna l'indirizzo di rete e il numero di porta più appropriati. Usare un numero di porta pari a zero se si vuole che il provider di servizi sottostanti selezioni una porta gratuita. Se è necessario identificare l'indirizzo di rete locale assegnato e il numero di porta, è possibile usare la LocalEndPoint proprietà dopo il completamento del EndSendTo metodo.

Se si desidera inviare dati a un indirizzo di trasmissione, è prima necessario chiamare il SetSocketOption metodo e impostare l'opzione socket su SocketOptionName.Broadcast. -È anche necessario assicurarsi che le dimensioni del buffer non superino le dimensioni massime del provider di servizi sottostanti. In caso contrario, il datagram non verrà inviato e EndSendTo genererà un SocketExceptionoggetto .

Se si specifica il DontRoute flag come socketflags parametro, i dati inviati non verranno indirizzati.

Nota

Se si riceve un SocketExceptionoggetto , utilizzare la proprietà per ottenere il SocketException.ErrorCode codice di errore specifico. Dopo aver ottenuto questo codice, vedere la documentazione del codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.

Nota

Questo membro genera informazioni di traccia quando viene abilitata la funzionalità di traccia di rete nell'applicazione in uso. Per altre informazioni, vedere Traccia di rete in .NET Framework.

Nota

Il contesto di esecuzione (contesto di sicurezza, l'utente rappresentato e il contesto chiamante) viene memorizzato nella cache per i metodi asincroni Socket . Dopo il primo uso di un particolare contesto (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