Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Socket.BeginSend (Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

 

Data di pubblicazione: ottobre 2016

Invia i dati in modo asincrono un elemento connesso Socket.

Spazio dei nomi:   System.Net.Sockets
Assembly:  System (in System.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public IAsyncResult BeginSend(
	byte[] buffer,
	int offset,
	int size,
	SocketFlags socketFlags,
	AsyncCallback callback,
	object state
)

Parametri

buffer
Type: System.Byte[]

Matrice di tipo Byte che contiene i dati da inviare.

offset
Type: System.Int32

La posizione in base zero di buffer parametro in corrispondenza del quale iniziare l'invio di dati.

size
Type: System.Int32

Il numero di byte da inviare.

socketFlags
Type: System.Net.Sockets.SocketFlags

Combinazione bit per bit dei valori di SocketFlags.

callback
Type: System.AsyncCallback

Delegato AsyncCallback.

state
Type: System.Object

Oggetto che contiene informazioni sullo stato per questa richiesta.

Valore restituito

Type: System.IAsyncResult

Un IAsyncResult che fa riferimento all'invio asincrono.

Exception Condition
ArgumentNullException

buffer è null.

SocketException

Si è verificato un errore durante il tentativo di accesso al socket. Nella sezione Osservazioni riportata di seguito.

ArgumentOutOfRangeException

offset è minore di 0.

-oppure-

offset è minore della lunghezza di buffer.

-oppure-

size è minore di 0.

-oppure-

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

ObjectDisposedException

L'oggetto Socket è stato chiuso.

Il BeginSend metodo avvia un'operazione di invio asincrono all'host remoto stabilita nel Connect, BeginConnect, Accept, o BeginAccept (metodo). BeginSend verrà generata un'eccezione se non si chiama prima Accept, BeginAccept, Connect, o BeginConnect. La chiamata di BeginSend metodo offre la possibilità di inviare dati all'interno di un thread di esecuzione separato.

È possibile creare un metodo di callback che implementa il AsyncCallback delegato e passare il relativo nome per il BeginSend metodo. A tale scopo, nel caso minimo, il state parametro deve contenere connesso o predefinito Socket utilizzato per la comunicazione. Se il callback richiede ulteriori informazioni, è possibile creare una classe o una struttura per contenere il Socket e le altre informazioni necessarie. Passare un'istanza di questa classe per il BeginSend metodo attraverso il state parametro.

Il metodo di callback deve richiamare il EndSend metodo. Quando l'applicazione chiama BeginSend, il sistema utilizzerà un thread separato per eseguire il metodo di callback specificato e bloccherà il EndSend fino a quando il Socket Invia il numero di byte richiesti o genera un'eccezione. Se si desidera che il thread originale si blocchi dopo la chiamata di BeginSend metodo, utilizzare il WaitHandle.WaitOne metodo. Chiamare il metodo Set in un oggetto t: System.Threading.ManualResetEvent nel metodo di callback quando si desidera che il thread originale per continuare l'esecuzione. Per ulteriori informazioni sulla scrittura di metodi di callback vedere Marshaling a Delegate as a Callback Method.

Sebbene sia destinato ai protocolli orientati alla connessione, BeginSend funziona anche per protocolli senza connessione, condizione che è necessario chiamare prima il Connect o BeginConnect per stabilire un host remoto predefinito. Se si utilizza un protocollo senza connessione e si intende inviare dati a diversi host, è necessario utilizzare BeginSendTo. È possibile utilizzare BeginSendTo anche dopo aver stabilito un host remoto predefinito con Connect. È inoltre possibile modificare l'host remoto predefinito prima di chiamare BeginSend mediante un'altra chiamata a Connect o BeginConnect. Protocolli senza connessione, è inoltre necessario verificare che le dimensioni del buffer non superino le dimensioni massime del provider del servizio sottostante. In questo caso, non verrà inviato il datagramma e BeginSend genererà un SocketException.

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

System_CAPS_noteNota

Se si riceve un SocketException, utilizzare il SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo avere ottenuto il codice, fare riferimento alla versione di Windows Sockets API errore codice documentazione 2 in MSDN library per una descrizione dettagliata dell'errore.

System_CAPS_noteNota

Tutti i/o avviate da un determinato thread viene annullata all'uscita dal thread. Un'operazione asincrona in sospeso può non riuscire se il thread termina prima del completamento dell'operazione.

System_CAPS_noteNota

state rappresenta un'istanza di una classe definita dall'utente.

System_CAPS_noteNota

Il completamento di una trasmissione non indica che i dati sono stati recapitati correttamente. Se lo spazio di buffer non è disponibile all'interno del sistema di trasporto per contenere i dati da trasmettere, trasmissione si bloccherà a meno che non è stato inserito il socket in modalità non di blocco.

System_CAPS_noteNota

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

System_CAPS_noteNota

Il contesto di esecuzione (il contesto di sicurezza, l'utente rappresentato e il contesto di chiamata) viene memorizzato nella cache per asincrona Socket metodi. Dopo il primo utilizzo di un particolare contesto (un oggetto specifico asincrono Socket metodo, una specifica Socket istanza e un callback specifico), nei successivi utilizzi di tale contesto verranno visualizzato un miglioramento delle prestazioni.

Nell'esempio seguente inizia l'invio asincrono di dati a un host remoto.

allDone.Set();
Socket s = (Socket) ar.AsyncState;
s.EndConnect(ar);
StateObject so2 = new StateObject();
so2.workSocket = s;
byte[] buff = Encoding.ASCII.GetBytes("This is a test");
s.BeginSend(buff, 0, buff.Length,0,
                   new AsyncCallback(Async_Send_Receive.Send_Callback), so2);    

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: