Socket.ReceiveFrom Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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
- 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
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
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
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
- 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
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
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
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
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
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
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
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
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
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
- 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
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 buffer
e 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.