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.SendTo (Byte[], Int32, Int32, SocketFlags, EndPoint)

 

Data di pubblicazione: ottobre 2016

Invia il numero specificato di byte di dati all'endpoint specificato, a partire dalla posizione specificata nel buffer e utilizzando l'oggetto specificato SocketFlags.

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

public int SendTo(
	byte[] buffer,
	int offset,
	int size,
	SocketFlags socketFlags,
	EndPoint remoteEP
)

Parametri

buffer
Type: System.Byte[]

Matrice di tipo Byte che contiene i dati da inviare.

offset
Type: System.Int32

Posizione nel buffer di dati da cui 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.

remoteEP
Type: System.Net.EndPoint

Il EndPoint che rappresenta il percorso di destinazione per i dati.

Valore restituito

Type: System.Int32

Numero di byte inviati.

Exception Condition
ArgumentNullException

buffer è null.

-oppure-

remoteEP è null.

ArgumentOutOfRangeException

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

SocketException

socketFlags non è una combinazione valida di valori.

-oppure-

Si verifica un errore di sistema operativo durante l'accesso di Socket. Per altre informazioni, vedere la sezione Osservazioni.

ObjectDisposedException

L'oggetto Socket è stato chiuso.

SecurityException

Un chiamante nello stack di chiamate non dispone delle autorizzazioni necessarie.

In questo overload, se si specifica il DontRoute Contrassegna come il socketflags parametro, i dati inviati non verranno indirizzati.

Se si utilizza un protocollo senza connessione, non necessaria stabilire un host remoto predefinito con il Connect metodo prima di chiamare SendTo. È necessario eseguire questa operazione se si intende chiamare il Send metodo. Se si chiama il Connect metodo prima di chiamare SendTo, remoteEP parametro eseguirà l'override dell'host remoto specificato per tale operazione solo di invio. Inoltre non è necessario chiamare il Bind (metodo), poiché il provider del servizio sottostante assegnerà il numero di porta e indirizzo di rete locale più appropriato. Se è necessario identificare il numero di porta e indirizzo di rete locale assegnato, è possibile utilizzare il LocalEndPoint proprietà dopo il SendTo completamento del metodo.

Sebbene sia destinato ai protocolli senza connessione, SendTo funziona anche con protocolli orientati alla connessione. Se si utilizza un protocollo orientato alla connessione, è innanzitutto necessario stabilire una connessione all'host remoto chiamando il Connect metodo o accettare una richiesta di connessione in ingresso tramite il Accept metodo. Se non si stabilire o accettare una connessione all'host remoto, SendTo genererà un SocketException. È inoltre possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il SendTo metodo. In entrambi i casi, SendTo ignorerà il remoteEP parametro e solo invierà dati connesso o l'host remoto.

Socket bloccanti si bloccheranno fino a quando non viene inviato il numero di byte richiesto. Poiché non bloccante Socket viene completata immediatamente, potrebbe non inviare tutti i byte richiesti in un'unica operazione. Ha la responsabilità di applicazioni per tenere traccia del numero di byte inviati e per ripetere l'operazione fino a quando l'applicazione invia il numero di byte richiesto. Non vi è alcuna garanzia che i dati inviati vengano visualizzati immediatamente nella rete. Per aumentare l'efficienza della rete, il sistema sottostante può rinviare la trasmissione fino a quando non verrà raccolti una notevole quantità di dati in uscita. Il completamento del SendTo metodo significa che il sistema sottostante avesse spazio sufficiente per i buffer per l'inviano dei dati per una rete.

Se si utilizza un protocollo senza connessione in modalità di blocco, SendTo si bloccherà fino all'invio del datagramma. Se si desidera inviare dati a un indirizzo di broadcast, è necessario chiamare prima il SetSocketOption metodo e impostare l'opzione socket per SocketOptionName.Broadcast. È inoltre necessario assicurarsi che le dimensioni non superino le dimensioni massime del provider del servizio sottostante. In questo caso, non verrà inviato il datagramma e SendTo genererà un SocketException.

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

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.

Esempio di codice seguente invia un datagramma senza connessione all'host remoto specificato. L'offset, dimensione e SocketFlags vengono passati per il SendTo metodo.

public static void SendTo4()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);

    byte[] msg = Encoding.ASCII.GetBytes("This is a test");
    Console.WriteLine("Sending data.");
    // This call blocks. 
    s.SendTo(msg, 0, msg.Length, SocketFlags.None, endPoint);
    s.Close();
}

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