Condividi tramite


Socket.ReceiveFrom Metodo

Definizione

Riceve un datagramma e memorizza l'endpoint di origine.

Overload

ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)

Riceve il numero di byte specificato nel buffer di dati, utilizzando l'oggetto SocketFlags specificato e memorizza l'endpoint.

ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)

Riceve il numero specificato di byte di dati nella posizione specificata del buffer di dati usando l'oggetto SocketFlags specificato e archivia l'endpoint.

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

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

ReceiveFrom(Byte[], SocketFlags, EndPoint)

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

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

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

ReceiveFrom(Span<Byte>, EndPoint)

Riceve un datagramma nel buffer di dati e memorizza l'endpoint.

ReceiveFrom(Byte[], EndPoint)

Riceve un datagramma nel buffer di dati e memorizza l'endpoint.

ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)

Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs

Riceve il numero di byte specificato nel buffer di dati, utilizzando l'oggetto SocketFlags specificato e memorizza l'endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * int * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

Parametri

buffer
Byte[]

Matrice di tipo Byte che rappresenta la posizione di archiviazione dei dati ricevuti.

size
Int32

Numero di byte da ricevere.

socketFlags
SocketFlags

Combinazione bit per bit dei valori di SocketFlags.

remoteEP
EndPoint

Riferimento a un EndPoint oggetto dello stesso tipo dell'endpoint dell'host remoto da aggiornare in caso di ricezione riuscita.

Restituisce

Numero di byte ricevuti.

Eccezioni

buffer è null.

-oppure-

remoteEP è null.

size è minore di 0.

-oppure-

size è maggiore della lunghezza di buffer.

socketFlags non è una combinazione valida di valori.

-oppure-

La proprietà LocalEndPoint non è stata impostata.

-oppure-

Si verifica un errore del sistema operativo durante l'accesso a Socket.

L'oggetto Socket è stato chiuso.

Uno dei chiamanti nello stack di chiamate non dispone delle autorizzazioni richieste.

Esempio

L'esempio di codice seguente riceve un datagramma senza connessione da un host remoto. Le dimensioni del buffer e SocketFlags vengono passate al ReceiveFrom metodo .

static void ReceiveFrom3()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IPEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine(  "SWaiting to receive datagrams from client..." );
   // This call blocks. 
   s->ReceiveFrom( msg, msg->Length, SocketFlags::None, senderRemote );
   s->Close();
}
public static void ReceiveFrom3()
{
    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, msg.Length, SocketFlags.None, ref senderRemote);
    s.Close();
}
Public Shared Sub ReceiveFrom3() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IPEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any, 0)
    Dim senderRemote As EndPoint = CType(sender, EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    
    Dim msg() As Byte = New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    ' This call blocks. 
    s.ReceiveFrom(msg, msg.Length, SocketFlags.None, senderRemote)
    s.Close()

End Sub

Commenti

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

Questo overload richiede solo di fornire un buffer di ricezione, il numero di byte che si desidera ricevere, l'oggetto necessario SocketFlagse un oggetto EndPoint che rappresenta l'host remoto. Per impostazione predefinita, l'offset del buffer è 0.

Con i protocolli senza connessione, ReceiveFrom leggerà il primo datagramma accodato ricevuto nel buffer di rete locale. Se il datagramma ricevuto è maggiore delle dimensioni di buffer, il ReceiveFrom 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 recuperarlo chiamando il ReceiveFrom metodo con un buffer sufficientemente grande.

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

Anche se ReceiveFrom è destinato ai protocolli senza connessione, è possibile usare anche un protocollo orientato alla connessione. Se si sceglie di eseguire questa operazione, è innanzitutto necessario stabilire una connessione host remota chiamando il Connect metodo o accettando una connessione host remota in ingresso chiamando il Accept metodo . Se non si stabilisce o si accetta una connessione prima di chiamare il ReceiveFrom metodo , si otterrà un oggetto SocketException. È anche possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il ReceiveFrom metodo .

Con i socket orientati alla connessione, ReceiveFrom leggerà la quantità di dati disponibile fino al numero di byte specificato dal size parametro . Se l'host remoto arresta la Socket connessione con il Shutdown metodo e tutti i dati disponibili sono stati ricevuti, il ReceiveFrom metodo verrà completato immediatamente e restituirà zero byte.

Nota

Prima di chiamare ReceiveFrom, è necessario associare in modo esplicito a Socket un endpoint locale usando il Bind metodo . In caso contrario, ReceiveFrom genererà un'eccezione SocketException. Se si riceve un SocketExceptionoggetto , utilizzare la SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo aver ottenuto questo codice, fare riferimento alla documentazione relativa al codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.

Nota

Oggetto AddressFamily dell'oggetto EndPoint utilizzato in ReceiveFrom deve corrispondere all'oggetto AddressFamily dell'oggetto EndPoint utilizzato in SendTo.

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.

Vedi anche

Si applica a

ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)

Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs

Riceve il numero specificato di byte di dati nella posizione specificata del buffer di dati usando l'oggetto SocketFlags specificato e archivia l'endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

Parametri

buffer
Byte[]

Matrice di tipo Byte che rappresenta la posizione di archiviazione dei dati ricevuti.

offset
Int32

Posizione nel parametro buffer in cui archiviare i dati ricevuti.

size
Int32

Numero di byte da ricevere.

socketFlags
SocketFlags

Combinazione bit per bit dei valori di SocketFlags.

remoteEP
EndPoint

Riferimento a un EndPoint oggetto dello stesso tipo dell'endpoint dell'host remoto da aggiornare in caso di ricezione riuscita.

Restituisce

Numero di byte ricevuti.

Eccezioni

buffer è null.

-oppure-

remoteEP è null.

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

socketFlags non è una combinazione valida di valori.

-oppure-

La proprietà LocalEndPoint non è stata impostata.

-oppure-

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Esempio

L'esempio di codice seguente riceve un datagramma senza connessione da un host remoto. Offset, dimensioni del buffer e SocketFlags vengono passati al ReceiveFrom metodo .

static void ReceiveFrom4()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IpEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine(  "SWaiting to receive datagrams from client..." );
   // This call blocks.  
   s->ReceiveFrom( msg, 0, msg->Length, SocketFlags::None, senderRemote );
   s->Close();
}
public static void ReceiveFrom4()
{
    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, 0, msg.Length, SocketFlags.None, ref senderRemote);
    s.Close();
}
Public Shared Sub ReceiveFrom4() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IpEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any, 0)
    Dim senderRemote As EndPoint = CType(sender, EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    Dim msg() As Byte = New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    ' This call blocks.  
    s.ReceiveFrom(msg, 0, msg.Length, SocketFlags.None, senderRemote)
    s.Close()

End Sub

Commenti

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

Con i protocolli senza connessione, ReceiveFrom leggerà il primo datagramma accodato ricevuto nel buffer di rete locale. Se il datagramma ricevuto è maggiore delle dimensioni di buffer, il ReceiveFrom 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 recuperarlo chiamando il ReceiveFrom metodo con un buffer sufficientemente grande.

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

Anche se ReceiveFrom è destinato ai protocolli senza connessione, è possibile usare anche un protocollo orientato alla connessione. Se si sceglie di eseguire questa operazione, è innanzitutto necessario stabilire una connessione host remota chiamando il Connect metodo o accettando una connessione host remota in ingresso chiamando il Accept metodo . Se non si stabilisce o si accetta una connessione prima di chiamare il ReceiveFrom metodo , si otterrà un oggetto SocketException. È anche possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il ReceiveFrom metodo .

Con i socket orientati alla connessione, ReceiveFrom leggerà la quantità di dati disponibile fino alla quantità di byte specificata dal size parametro . Se l'host remoto arresta la Socket connessione con il Shutdown metodo e tutti i dati disponibili sono stati ricevuti, il ReceiveFrom metodo verrà completato immediatamente e restituirà zero byte.

Nota

Prima di chiamare ReceiveFrom, è necessario associare in modo esplicito a Socket un endpoint locale usando il Bind metodo . In caso contrario, ReceiveFrom genererà un'eccezione SocketException. Se si riceve un SocketExceptionoggetto , utilizzare la SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo aver ottenuto questo codice, fare riferimento alla documentazione relativa al codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.

Nota

Oggetto AddressFamily dell'oggetto EndPoint utilizzato in ReceiveFrom deve corrispondere all'oggetto AddressFamily dell'oggetto EndPoint utilizzato in SendTo.

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.

Vedi anche

Si applica a

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs

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

public:
 int ReceiveFrom(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : Span<byte> * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Span(Of Byte), socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

Parametri

buffer
Span<Byte>

Intervallo di byte che rappresenta la posizione di archiviazione per i dati ricevuti.

socketFlags
SocketFlags

Combinazione bit per bit dei valori di SocketFlags.

remoteEP
EndPoint

Riferimento a un EndPoint oggetto dello stesso tipo dell'endpoint dell'host remoto da aggiornare in caso di ricezione riuscita.

Restituisce

Numero di byte ricevuti.

Eccezioni

remoteEP è null.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Si applica a

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs

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

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

Parametri

buffer
Byte[]

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

socketFlags
SocketFlags

Combinazione bit per bit dei valori di SocketFlags.

remoteEP
EndPoint

Riferimento a un EndPoint oggetto dello stesso tipo dell'endpoint dell'host remoto da aggiornare in caso di ricezione riuscita.

Restituisce

Numero di byte ricevuti.

Eccezioni

buffer è null.

-oppure-

remoteEP è null.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Uno dei chiamanti nello stack di chiamate non dispone delle autorizzazioni richieste.

Esempio

L'esempio di codice seguente riceve un datagramma senza connessione da un host remoto. SocketFlags vengono passati al ReceiveFrom metodo .

static void ReceiveFrom2()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IpEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine( "Waiting to receive datagrams from client..." );
   // This call blocks. 
   s->ReceiveFrom( msg, SocketFlags::None, senderRemote );
   s->Close();
}
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();
}
Public Shared Sub ReceiveFrom2() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IpEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any, 0)
    Dim senderRemote As EndPoint = CType(sender, EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    
    Dim msg() As Byte = New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    ' This call blocks. 
    s.ReceiveFrom(msg, SocketFlags.None, senderRemote)
    s.Close()

End Sub

Commenti

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

Questo overload richiede solo di fornire un buffer di ricezione, l'oggetto necessario SocketFlagse un oggetto EndPoint che rappresenta l'host remoto. L'offset viene impostato per impostazione predefinita su 0 e la dimensione predefinita corrisponde alla lunghezza del parametro del buffer.

Nota

Prima di chiamare ReceiveFrom, è necessario associare in modo esplicito a Socket un endpoint locale usando il Bind metodo . In caso contrario, ReceiveFrom genererà un'eccezione SocketException.

Con i protocolli senza connessione, ReceiveFrom leggerà il primo datagramma accodato ricevuto nel buffer di rete locale. Se il datagramma ricevuto è maggiore delle dimensioni di buffer, il ReceiveFrom 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 recuperarlo chiamando il ReceiveFrom metodo con un buffer sufficientemente grande.

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

Anche se ReceiveFrom è destinato ai protocolli senza connessione, è possibile usare anche un protocollo orientato alla connessione. Se si sceglie di eseguire questa operazione, è innanzitutto necessario stabilire una connessione host remota chiamando il Connect metodo o accettando una connessione host remota in ingresso chiamando il Accept metodo . Se non si stabilisce o si accetta una connessione prima di chiamare il ReceiveFrom metodo , si otterrà un oggetto SocketException. È anche possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il ReceiveFrom metodo .

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

Nota

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

Nota

Oggetto AddressFamily dell'oggetto EndPoint utilizzato in ReceiveFrom deve corrispondere all'oggetto AddressFamily dell'oggetto EndPoint utilizzato in SendTo.

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.

Vedi anche

Si applica a

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

Origine:
Socket.cs
Origine:
Socket.cs

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

public:
 int ReceiveFrom(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::SocketAddress ^ receivedAddress);
public int ReceiveFrom (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.SocketAddress receivedAddress);
member this.ReceiveFrom : Span<byte> * System.Net.Sockets.SocketFlags * System.Net.SocketAddress -> int
Public Function ReceiveFrom (buffer As Span(Of Byte), socketFlags As SocketFlags, receivedAddress As SocketAddress) As Integer

Parametri

buffer
Span<Byte>

Intervallo di byte che rappresenta la posizione di archiviazione per i dati ricevuti.

socketFlags
SocketFlags

Combinazione bit per bit dei valori di SocketFlags.

receivedAddress
SocketAddress

SocketAddress Istanza di che viene aggiornata con il valore del peer remoto quando termina questo metodo.

Restituisce

Numero di byte ricevuti.

Eccezioni

receivedAddress è null.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Si applica a

ReceiveFrom(Span<Byte>, EndPoint)

Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs

Riceve un datagramma nel buffer di dati e memorizza l'endpoint.

public:
 int ReceiveFrom(Span<System::Byte> buffer, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (Span<byte> buffer, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : Span<byte> * EndPoint -> int
Public Function ReceiveFrom (buffer As Span(Of Byte), ByRef remoteEP As EndPoint) As Integer

Parametri

buffer
Span<Byte>

Intervallo di byte che rappresenta la posizione di archiviazione per i dati ricevuti.

remoteEP
EndPoint

Riferimento a un EndPoint oggetto dello stesso tipo dell'endpoint dell'host remoto da aggiornare in caso di ricezione riuscita.

Restituisce

Numero di byte ricevuti.

Eccezioni

remoteEP è null.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Si applica a

ReceiveFrom(Byte[], EndPoint)

Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs

Riceve un datagramma nel buffer di dati e memorizza l'endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), ByRef remoteEP As EndPoint) As Integer

Parametri

buffer
Byte[]

Matrice di tipo Byte che rappresenta la posizione di archiviazione dei dati ricevuti.

remoteEP
EndPoint

Riferimento a un EndPoint oggetto dello stesso tipo dell'endpoint dell'host remoto da aggiornare in caso di ricezione riuscita.

Restituisce

Numero di byte ricevuti.

Eccezioni

buffer è null.

-oppure-

remoteEP è null.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Uno dei chiamanti nello stack di chiamate non dispone delle autorizzazioni richieste.

Esempio

L'esempio di codice seguente riceve un datagramma senza connessione da un host remoto.

static void ReceiveFrom1()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IPEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine( "Waiting to receive datagrams from client..." );
   
   // This call blocks. 
   s->ReceiveFrom( msg, senderRemote );
   s->Close();
}
public static void ReceiveFrom1()
{
    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, ref senderRemote);
    s.Close();
}
Public Shared Sub ReceiveFrom1() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IPEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any, 0)
    Dim senderRemote As EndPoint = CType(sender, EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    
    Dim msg() As Byte = New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    
    ' This call blocks. 
    s.ReceiveFrom(msg, senderRemote)
    s.Close()

End Sub

Commenti

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

Questo overload richiede solo di fornire una ricezione buffere un oggetto EndPoint che rappresenta l'host remoto. Per impostazione predefinita, l'offset del buffer è 0. Per impostazione predefinita, la dimensione è la lunghezza del buffer parametro e il socketFlags valore predefinito è None.

Nota

Prima di chiamare ReceiveFrom, è necessario associare in modo esplicito a Socket un endpoint locale usando il Bind metodo . In caso contrario, ReceiveFrom genererà un'eccezione SocketException.

Con i protocolli senza connessione, ReceiveFrom leggerà il primo datagramma accodato ricevuto nel buffer di rete locale. Se il datagramma ricevuto è maggiore delle dimensioni di buffer, il ReceiveFrom 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 recuperarlo chiamando il ReceiveFrom metodo con un buffer sufficientemente grande.

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

Anche se ReceiveFrom è destinato ai protocolli senza connessione, è possibile usare anche un protocollo orientato alla connessione. Se si sceglie di eseguire questa operazione, è innanzitutto necessario stabilire una connessione host remota chiamando il Connect metodo o accettando una connessione host remota in ingresso chiamando il Accept metodo . Se non si stabilisce o si accetta una connessione prima di chiamare il ReceiveFrom metodo , si otterrà un oggetto SocketException. È anche possibile stabilire un host remoto predefinito per un protocollo senza connessione prima di chiamare il ReceiveFrom metodo .

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

Nota

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

Nota

Oggetto AddressFamily dell'oggetto EndPoint utilizzato in ReceiveFrom deve corrispondere all'oggetto AddressFamily dell'oggetto EndPoint utilizzato in SendTo.

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.

Vedi anche

Si applica a