Socket.ReceiveFrom Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přijme datagram a uloží zdrojový koncový bod.
Přetížení
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint) |
Přijme zadaný počet bajtů do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod. |
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint) |
Přijme zadaný počet bajtů dat do zadaného umístění datové vyrovnávací paměti pomocí zadaného SocketFlagsa uloží koncový bod. |
ReceiveFrom(Span<Byte>, SocketFlags, EndPoint) |
Přijme datagram do datové vyrovnávací paměti pomocí zadaného SocketFlagsa uloží koncový bod. |
ReceiveFrom(Byte[], SocketFlags, EndPoint) |
Přijme datagram do datové vyrovnávací paměti pomocí zadaného SocketFlagsa uloží koncový bod. |
ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress) |
Přijme datagram do datové vyrovnávací paměti pomocí zadaného SocketFlagsa uloží koncový bod. |
ReceiveFrom(Span<Byte>, EndPoint) |
Přijme datagram do datové vyrovnávací paměti a uloží koncový bod. |
ReceiveFrom(Byte[], EndPoint) |
Přijme datagram do datové vyrovnávací paměti a uloží koncový bod. |
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme zadaný počet bajtů do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod.
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
Parametry
- size
- Int32
Počet bajtů, které se mají přijmout.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
- remoteEP
- EndPoint
Odkaz na EndPoint objekt stejného typu jako koncový bod vzdáleného hostitele, který se má aktualizovat při úspěšném přijetí.
Návraty
Počet přijatých bajtů
Výjimky
socketFlags
není platná kombinace hodnot.
-nebo-
Vlastnost LocalEndPoint nebyla nastavena.
-nebo-
Při přístupu k dojde k chybě operačního Socketsystému .
Byla Socket uzavřena.
Volající v zásobníku volání nemá požadovaná oprávnění.
Příklady
Následující příklad kódu obdrží datagram bez připojení ze vzdáleného hostitele. Velikost vyrovnávací paměti a SocketFlags jsou předány ReceiveFrom metodě .
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
Poznámky
Metoda ReceiveFrom načte data do parametru buffer
, vrátí počet bajtů, které se úspěšně načetly, a zachytí koncový bod vzdáleného hostitele, ze kterého byla data odeslána. Tato metoda je užitečná, pokud máte v úmyslu přijímat datagramy bez připojení z neznámého hostitele nebo více hostitelů.
Toto přetížení pouze vyžaduje, abyste zadali vyrovnávací paměť pro příjem, počet bajtů, které chcete přijmout, nezbytné SocketFlagsa objekt EndPoint , který představuje vzdáleného hostitele. Výchozí posun vyrovnávací paměti je 0.
U protokolů bez připojení načte ReceiveFrom první datagram přijatý do fronty do místní síťové vyrovnávací paměti. Pokud je datagram, který obdržíte, větší než velikost buffer
, metoda vyplní buffer
co nejvíce zprávy a vyvolá SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, budou nadbytečná data ztracena. Pokud používáte spolehlivý protokol, poskytovatel služby zachovají nadbytečná data a můžete je načíst voláním ReceiveFrom metody s dostatečně velkou vyrovnávací pamětí.
Pokud nejsou k dispozici žádná data pro čtení, metoda se zablokuje, dokud nebudou ReceiveFrom data k dispozici. Pokud jste v neblokovacím režimu a ve vyrovnávací paměti zásobníku protokolu nejsou k dispozici žádná data, ReceiveFrom metoda se okamžitě dokončí a vyvolá SocketException. Pomocí vlastnosti můžete Available určit, jestli jsou data dostupná ke čtení. Pokud Available je nenulová, zkuste operaci příjmu zopakovat.
I když ReceiveFrom je určen pro protokoly bez připojení, můžete použít také protokol orientovaný na připojení. Pokud se tak rozhodnete, musíte nejprve vytvořit připojení ke vzdálenému hostiteli voláním Connect metody nebo přijmout příchozí připojení vzdáleného Accept hostitele voláním metody . Pokud před voláním ReceiveFrom metody nenavážete nebo nepřijmete připojení, zobrazí se SocketException. Před voláním metody můžete také vytvořit výchozího vzdáleného ReceiveFrom hostitele pro protokol bez připojení.
U soketů orientovaných na připojení bude číst tolik dat, ReceiveFrom kolik je k dispozici, až do počtu bajtů určených parametrem size
. Pokud vzdálený hostitel ukončí Socket připojení pomocí Shutdown metody a byla přijata všechna dostupná data, ReceiveFrom metoda se okamžitě dokončí a vrátí nula bajtů.
Poznámka
Před voláním ReceiveFrompříkazu je nutné explicitně vytvořit vazbu Socket s místním koncovým bodem pomocí Bind metody . Pokud to neuděláte, ReceiveFrom vyvolá SocketExceptionvýjimku . Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Poznámka
Hodnota AddressFamily použité v EndPointReceiveFrom musí odpovídat hodnotě AddressFamilyEndPoint použité v SendTo.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Platí pro
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme zadaný počet bajtů dat do zadaného umístění datové vyrovnávací paměti pomocí zadaného SocketFlagsa uloží koncový bod.
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
Parametry
- offset
- Int32
Pozice v parametru buffer
pro uložení přijatých dat.
- size
- Int32
Počet bajtů, které se mají přijmout.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
- remoteEP
- EndPoint
Odkaz na EndPoint objekt stejného typu jako koncový bod vzdáleného hostitele, který se má aktualizovat při úspěšném přijetí.
Návraty
Počet přijatých bajtů.
Výjimky
offset
je menší než 0.
-nebo-
offset
je větší než délka .buffer
-nebo-
size
je menší než 0.
-nebo-
size
je větší než délka parametru buffer
minus hodnota parametru posunu.
socketFlags
není platná kombinace hodnot.
-nebo-
Vlastnost LocalEndPoint nebyla nastavena.
-nebo-
Při pokusu o přístup k soketu došlo k chybě.
Byla Socket uzavřena.
Příklady
Následující příklad kódu obdrží datagram bez připojení ze vzdáleného hostitele. Posun, velikost vyrovnávací paměti a SocketFlags jsou předány ReceiveFrom metodě .
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
Poznámky
Metoda ReceiveFrom načte data do parametru buffer
, vrátí počet bajtů, které se úspěšně načetly, a zachytí koncový bod vzdáleného hostitele, ze kterého byla data odeslána. Tato metoda je užitečná, pokud máte v úmyslu přijímat datagramy bez připojení z neznámého hostitele nebo více hostitelů.
U protokolů bez připojení načte ReceiveFrom první datagram přijatý do fronty do místní síťové vyrovnávací paměti. Pokud je datagram, který obdržíte, větší než velikost buffer
, metoda vyplní buffer
co nejvíce zprávy a vyvolá SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, budou nadbytečná data ztracena. Pokud používáte spolehlivý protokol, poskytovatel služby zachovají nadbytečná data a můžete je načíst voláním ReceiveFrom metody s dostatečně velkou vyrovnávací pamětí.
Pokud nejsou k dispozici žádná data pro čtení, metoda se zablokuje, dokud nebudou ReceiveFrom data k dispozici. Pokud jste v neblokovacím režimu a ve vyrovnávací paměti zásobníku protokolu nejsou k dispozici žádná data, ReceiveFrom metoda se okamžitě dokončí a vyvolá SocketException. Pomocí vlastnosti můžete Available určit, jestli jsou data dostupná ke čtení. Pokud Available je nenulová, zkuste operaci příjmu zopakovat.
I když ReceiveFrom je určen pro protokoly bez připojení, můžete použít také protokol orientovaný na připojení. Pokud se tak rozhodnete, musíte nejprve vytvořit připojení ke vzdálenému hostiteli voláním Connect metody nebo přijmout příchozí připojení vzdáleného Accept hostitele voláním metody. Pokud před voláním ReceiveFrom metody nenavážete nebo nepřijmete připojení, získáte SocketException. Před voláním metody můžete také vytvořit výchozího vzdáleného ReceiveFrom hostitele pro protokol bez připojení.
U soketů orientovaných na připojení bude číst tolik dat, ReceiveFrom kolik je k dispozici, až do objemu bajtů určených parametrem size
. Pokud vzdálený hostitel vypne Socket připojení s metodou Shutdown a všechna dostupná data jsou přijata, ReceiveFrom metoda se okamžitě dokončí a vrátí nula bajtů.
Poznámka
Před voláním ReceiveFromje nutné explicitně vytvořit vazbu Socket s místním koncovým bodem pomocí Bind metody . Pokud to neuděláte, ReceiveFrom vyhodí SocketException. Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .
Poznámka
Hodnota AddressFamily použitého EndPoint v ReceiveFrom musí odpovídat hodnotě AddressFamilyEndPoint použité v SendTo.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Platí pro
ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme datagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod.
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
Parametry
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
- remoteEP
- EndPoint
Odkaz na EndPoint objekt stejného typu jako koncový bod vzdáleného hostitele, který se má aktualizovat při úspěšném přijetí.
Návraty
Počet přijatých bajtů.
Výjimky
remoteEP
je null
.
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Platí pro
ReceiveFrom(Byte[], SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme datagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod.
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
Parametry
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
- remoteEP
- EndPoint
Odkaz na EndPoint objekt stejného typu jako koncový bod vzdáleného hostitele, který se má aktualizovat při úspěšném přijetí.
Návraty
Počet přijatých bajtů.
Výjimky
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Volající v zásobníku volání nemá požadovaná oprávnění.
Příklady
Následující příklad kódu přijímá datagram bez připojení ze vzdáleného hostitele. SocketFlags jsou předány ReceiveFrom metodě.
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
Poznámky
Metoda ReceiveFrom načte data do parametru buffer
, vrátí počet bajtů, které byly úspěšně přečteny, a zachytí koncový bod vzdáleného hostitele, ze kterého byla data odeslána. Tato metoda je užitečná, pokud chcete přijímat datagramy bez připojení od neznámého hostitele nebo více hostitelů.
Toto přetížení vyžaduje pouze poskytnutí vyrovnávací paměti příjmu, nezbytné SocketFlagsa , EndPoint který představuje vzdáleného hostitele. Výchozí hodnota posunu je 0 a výchozí velikost odpovídá délce parametru vyrovnávací paměti.
Poznámka
Před voláním ReceiveFromje nutné explicitně vytvořit vazbu Socket s místním koncovým bodem pomocí Bind metody . Pokud to neuděláte, ReceiveFrom vyhodí SocketException.
U protokolů ReceiveFrom bez připojení přečte první datagram přijatý do fronty do vyrovnávací paměti místní sítě. Pokud je datagram, který obdržíte, větší než velikost buffer
, metoda vyplní buffer
co nejvíce zprávy a vyhodí SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, budou nadbytečná data ztracena. Pokud používáte spolehlivý protokol, zachovají se nadbytečná data poskytovatelem služby a můžete je načíst voláním ReceiveFrom metody s dostatečně velkou vyrovnávací pamětí.
Pokud nejsou k dispozici žádná data pro čtení, metoda se zablokuje, ReceiveFrom dokud nebudou data k dispozici. Pokud jste v neblokovacím režimu a ve vyrovnávací paměti zásobníku ReceiveFrom protokolu nejsou k dispozici žádná data, metoda se okamžitě dokončí a vyvolá SocketException. Pomocí vlastnosti můžete Available určit, jestli jsou data k dispozici pro čtení. Pokud Available je nenulová, zkuste operaci příjmu zopakovat.
I když ReceiveFrom je určen pro protokoly bez připojení, můžete použít také protokol orientovaný na připojení. Pokud se tak rozhodnete, musíte nejprve vytvořit připojení ke vzdálenému hostiteli voláním Connect metody nebo přijmout příchozí připojení vzdáleného Accept hostitele voláním metody. Pokud před voláním ReceiveFrom metody nenavážete nebo nepřijmete připojení, získáte SocketException. Před voláním metody můžete také vytvořit výchozího vzdáleného ReceiveFrom hostitele pro protokol bez připojení.
U soketů orientovaných na připojení bude číst tolik dat, ReceiveFrom kolik je k dispozici, až do velikosti buffer
. Pokud vzdálený hostitel vypne Socket připojení s metodou Shutdown a všechna dostupná data jsou přijata, ReceiveFrom metoda se okamžitě dokončí a vrátí nula bajtů.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .
Poznámka
Hodnota AddressFamily použitého EndPoint v ReceiveFrom musí odpovídat hodnotě AddressFamilyEndPoint použité v SendTo.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Platí pro
ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme datagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod.
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
Parametry
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
- receivedAddress
- SocketAddress
Instance SocketAddress , která se aktualizuje s hodnotou vzdáleného partnerského vztahu, když tato metoda vrátí.
Návraty
Počet přijatých bajtů.
Výjimky
receivedAddress
je null
.
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Platí pro
ReceiveFrom(Span<Byte>, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme datagram do datové vyrovnávací paměti a uloží koncový bod.
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
Parametry
- remoteEP
- EndPoint
Odkaz na EndPoint objekt stejného typu jako koncový bod vzdáleného hostitele, který se má aktualizovat při úspěšném přijetí.
Návraty
Počet přijatých bajtů.
Výjimky
remoteEP
je null
.
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Platí pro
ReceiveFrom(Byte[], EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme datagram do datové vyrovnávací paměti a uloží koncový bod.
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
Parametry
- remoteEP
- EndPoint
Odkaz na EndPoint objekt stejného typu jako koncový bod vzdáleného hostitele, který se má aktualizovat při úspěšném přijetí.
Návraty
Počet přijatých bajtů.
Výjimky
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Volající v zásobníku volání nemá požadovaná oprávnění.
Příklady
Následující příklad kódu přijímá datagram bez připojení ze vzdáleného hostitele.
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
Poznámky
Metoda ReceiveFrom načte data do parametru buffer
, vrátí počet bajtů, které byly úspěšně přečteny, a zachytí koncový bod vzdáleného hostitele, ze kterého byla data odeslána. Tato metoda je užitečná, pokud chcete přijímat datagramy bez připojení od neznámého hostitele nebo více hostitelů.
Toto přetížení vyžaduje pouze zadání příjmu buffer
a objektu EndPoint , který představuje vzdáleného hostitele. Výchozí posun vyrovnávací paměti je 0. Výchozí velikost je délka parametru buffer
a socketFlags
výchozí hodnota je None.
Poznámka
Před voláním ReceiveFromje nutné explicitně vytvořit vazbu Socket s místním koncovým bodem pomocí Bind metody . Pokud to neuděláte, ReceiveFrom vyhodí SocketException.
U protokolů ReceiveFrom bez připojení přečte první datagram přijatý do fronty do vyrovnávací paměti místní sítě. Pokud je datagram, který obdržíte, větší než velikost buffer
, metoda vyplní buffer
co nejvíce zprávy a vyhodí SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, budou nadbytečná data ztracena. Pokud používáte spolehlivý protokol, zachovají se nadbytečná data poskytovatelem služby a můžete je načíst voláním ReceiveFrom metody s dostatečně velkou vyrovnávací pamětí.
Pokud nejsou k dispozici žádná data pro čtení, metoda se zablokuje, ReceiveFrom dokud nebudou data k dispozici. Pokud jste v neblokovacím režimu a ve vyrovnávací paměti zásobníku ReceiveFrom protokolu nejsou k dispozici žádná data, metoda se okamžitě dokončí a vyvolá SocketException. Pomocí vlastnosti můžete Available určit, jestli jsou data k dispozici pro čtení. Pokud Available je nenulová, zkuste operaci příjmu zopakovat.
I když ReceiveFrom je určen pro protokoly bez připojení, můžete použít také protokol orientovaný na připojení. Pokud se tak rozhodnete, musíte nejprve vytvořit připojení ke vzdálenému hostiteli voláním Connect metody nebo přijmout příchozí připojení vzdáleného Accept hostitele voláním metody. Pokud před voláním ReceiveFrom metody nenavážete nebo nepřijmete připojení, získáte SocketException. Před voláním metody můžete také vytvořit výchozího vzdáleného ReceiveFrom hostitele pro protokol bez připojení.
U soketů orientovaných na připojení bude číst tolik dat, ReceiveFrom kolik je k dispozici, až do velikosti buffer
. Pokud vzdálený hostitel vypne Socket připojení s metodou Shutdown a všechna dostupná data byla přijata, ReceiveFrom metoda se okamžitě dokončí a vrátí nula bajtů.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .
Poznámka
Hodnota AddressFamily použitého EndPoint v ReceiveFrom musí odpovídat hodnotě AddressFamilyEndPoint použité v SendTo.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.