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

 

Data di pubblicazione: ottobre 2016

Riceve un datagramma nel buffer di dati, utilizzando l'oggetto specificato SocketFlags, e archivia l'endpoint.

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

public int ReceiveFrom(
	byte[] buffer,
	SocketFlags socketFlags,
	ref EndPoint remoteEP
)

Parametri

buffer
Type: System.Byte[]

Matrice di tipo Byte che costituisce la posizione di archiviazione per i dati ricevuti.

socketFlags
Type: System.Net.Sockets.SocketFlags

Combinazione bit per bit dei valori di SocketFlags.

remoteEP
Type: System.Net.EndPoint

Un EndPoint, passato per riferimento, che rappresenta il server remoto.

Valore restituito

Type: System.Int32

Numero di byte ricevuti.

Exception Condition
ArgumentNullException

buffer è null.

-oppure-

remoteEP è null.

SocketException

Si è verificato un errore durante il tentativo di accesso al 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.

Il ReceiveFrom legge i dati nel metodo di buffer parametro, restituisce il numero di byte letti e acquisisce l'endpoint dell'host remoto da cui è stati inviati i dati. Questo metodo è utile se si prevede di ricevere datagrammi senza connessione da un host sconosciuto o più host.

Questo overload è sufficiente fornire un buffer di ricezione, necessari SocketFlags, e un EndPoint che rappresenta l'host remoto. L'offset valore predefinito è 0 e le impostazioni predefinite di dimensioni per la lunghezza del parametro di buffer.

System_CAPS_noteNota

Prima di chiamare ReceiveFrom, è necessario associare esplicitamente il Socket a un endpoint locale utilizzando il Bind metodo. In caso contrario, ReceiveFrom genererà un SocketException.

Protocolli senza connessione, ReceiveFrom leggerà il primo datagramma ricevuto nel buffer di rete locale. Se il datagramma ricevuto è maggiore della dimensione di buffer, ReceiveFrom metodo riempirà buffer con le informazioni del messaggio come è possibile e che generi un SocketException. Se si utilizza un protocollo non affidabile, i dati in eccesso andranno persi. Se si utilizza un protocollo affidabile, i dati in eccesso verranno mantenuti dal provider del servizio ed è possibile recuperarla chiamando il ReceiveFrom metodo con un buffer sufficientemente grande.

Se non sono disponibili per la lettura, dati il ReceiveFrom metodo si bloccherà fino a quando non sono disponibili dati. Se si è in modalità non di blocco e non sono presenti dati nel buffer di stack del protocollo, il ReceiveFrom metodo verrà completato immediatamente e genererà un SocketException. È possibile utilizzare il Available proprietà per determinare se sono disponibili per la lettura dei dati. QuandoAvailable è diverso da zero, quindi ripetere l'operazione di ricezione.

Anche se ReceiveFrom è destinato ai protocolli senza connessione, è possibile utilizzare anche un protocollo orientato alla connessione. Se si sceglie di eseguire questa operazione, è necessario innanzitutto stabilire una connessione all'host remoto chiamando il Connect metodo oppure accettare un remoto in ingresso connessione all'host chiamando il Accept metodo. Se non si stabilire o accettare una connessione prima di chiamare il ReceiveFrom (metodo), si otterrà un SocketException. È inoltre possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il ReceiveFrom metodo. In entrambi i casi, il ReceiveFrom metodo ignorerà il remoteEP parametro e solo ricevere dati da connesso o l'host remoto.

Con i socket orientati alla connessione, ReceiveFrom leggerà tutti i dati disponibili fino alle dimensioni di buffer. Se l'host remoto viene arrestato il Socket connessione con il Shutdown (metodo) e tutti i dati disponibili sono stati ricevuti, il ReceiveFrom metodo verrà completato immediatamente e restituirà zero byte.

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

Il AddressFamily di EndPoint utilizzati in ReceiveFrom deve corrispondere il AddressFamily del EndPoint utilizzati in SendTo.

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 riceve un datagramma senza connessione da un host remoto. SocketFlags vengono passati per il ReceiveFrom metodo.

public static void ReceiveFrom2()
{
    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);

    // Creates an IpEndPoint to capture the identity of the sending host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;

    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);

    byte[] msg = new Byte[256];
    Console.WriteLine ("Waiting to receive datagrams from client...");
    // This call blocks. 
    s.ReceiveFrom(msg, SocketFlags.None, ref senderRemote);
    s.Close();
}

SocketPermission

for accepting connections from the network. Associated enumeration: F:System.Net.NetworkAccess.Accept.

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