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í
| Name | Description |
|---|---|
| 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í vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod. |
| ReceiveFrom(Span<Byte>, SocketFlags, EndPoint) |
Přijme datagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod. |
| ReceiveFrom(Byte[], SocketFlags, EndPoint) |
Přijme datagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod. |
| ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress) |
Přijme datagram do vyrovnávací paměti dat pomocí zadaného SocketFlagsa uloží koncový bod. |
| ReceiveFrom(Span<Byte>, EndPoint) |
Přijme datagram do vyrovnávací paměti dat a uloží koncový bod. |
| ReceiveFrom(Byte[], EndPoint) |
Přijme datagram do vyrovnávací paměti dat a uloží koncový bod. |
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- 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 stejný EndPoint typ 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 systému dojde k chybě operačního Socketsystému .
Ta Socket byla 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 metodě ReceiveFrom .
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ů úspěšně přečtených 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í vyžaduje pouze poskytnutí vyrovnávací paměti pro příjem, počet bajtů, které chcete přijmout, nezbytné SocketFlagsa které EndPoint představuje vzdáleného hostitele. Výchozí hodnota posunu vyrovnávací paměti je 0.
S protokoly ReceiveFrom bez připojení přečte první vyčtený datagram přijatý 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 vyvolá SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, dojde ke ztrátě nadbytečných dat. Pokud používáte spolehlivý protokol, zachovají se nadbytečná data poskytovatelem služeb a můžete je načíst voláním ReceiveFrom metody s dostatečnou vyrovnávací pamětí.
Pokud nejsou k dispozici žádná data pro čtení, metoda zablokuje, ReceiveFrom dokud nebudou k dispozici data. Pokud jste v neblokovacím režimu a v 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 k dispozici pro čtení. Pokud Available není nula, 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 navázat připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí připojení vzdáleného hostitele voláním Accept 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 ReceiveFrom metody můžete také vytvořit výchozího vzdáleného hostitele pro protokol bez připojení.
V případě 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 vypne Socket připojení s metodou Shutdown a všechna dostupná data byla přijata, ReceiveFrom metoda se okamžitě dokončí a vrátí nulové bajty.
Poznámka:
Před voláním ReceiveFromje nutné explicitně vytvořit vazbu Socket k místnímu koncovému bodu pomocí Bind metody. Pokud ne, ReceiveFrom vyhodí .SocketException Pokud se zobrazí kód SocketExceptionchyby, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Po získání tohoto kódu si přečtěte dokumentaci k chybě rozhraní API rozhraní WINDOWS Sockets verze 2 , kde najdete podrobný popis chyby.
Poznámka:
Počet AddressFamilyEndPoint použitých hodnot ReceiveFrom musí odpovídat AddressFamily použitému EndPointSendTo
Poznámka:
Tento člen vypíše informace o trasování, když ve své aplikaci povolíte trasování sítě. Další informace naleznete 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
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme zadaný počet bajtů dat do zadaného umístění vyrovnávací paměti dat 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 stejný EndPoint typ 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 mínus buffer hodnoty 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ě.
Ta Socket byla 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 metodě ReceiveFrom .
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ů úspěšně přečtených 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ů.
S protokoly ReceiveFrom bez připojení přečte první vyčtený datagram přijatý 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 vyvolá SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, dojde ke ztrátě nadbytečných dat. Pokud používáte spolehlivý protokol, zachovají se nadbytečná data poskytovatelem služeb a můžete je načíst voláním ReceiveFrom metody s dostatečnou vyrovnávací pamětí.
Pokud nejsou k dispozici žádná data pro čtení, metoda zablokuje, ReceiveFrom dokud nebudou k dispozici data. Pokud jste v neblokovacím režimu a v 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 k dispozici pro čtení. Pokud Available není nula, 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 navázat připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí připojení vzdáleného hostitele voláním Accept 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 ReceiveFrom metody můžete také vytvořit výchozího vzdáleného hostitele pro protokol bez připojení.
V případě 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 byla 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 k místnímu koncovému bodu pomocí Bind metody. Pokud ne, ReceiveFrom vyhodí .SocketException Pokud se zobrazí kód SocketExceptionchyby, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Po získání tohoto kódu si přečtěte dokumentaci k chybě rozhraní API rozhraní WINDOWS Sockets verze 2 , kde najdete podrobný popis chyby.
Poznámka:
Počet AddressFamilyEndPoint použitých hodnot ReceiveFrom musí odpovídat AddressFamily použitému EndPointSendTo
Poznámka:
Tento člen vypíše informace o trasování, když ve své aplikaci povolíte trasování sítě. Další informace naleznete 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
- 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 stejný EndPoint typ 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ě.
Ta Socket byla uzavřena.
Platí pro
ReceiveFrom(Byte[], SocketFlags, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- 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 stejný EndPoint typ 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ě.
Ta Socket byla 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. SocketFlags jsou předány metodě ReceiveFrom .
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ů úspěšně přečtených 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í vyžaduje pouze poskytnutí vyrovnávací paměti pro příjem, nezbytné SocketFlagsa EndPoint které představuje vzdáleného hostitele. Posun je výchozí na 0 a výchozí velikost na délku parametru vyrovnávací paměti.
Poznámka:
Před voláním ReceiveFromje nutné explicitně vytvořit vazbu Socket k místnímu koncovému bodu pomocí Bind metody. Pokud ne, ReceiveFrom vyhodí .SocketException
S protokoly ReceiveFrom bez připojení přečte první vyčtený datagram přijatý 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 vyvolá SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, dojde ke ztrátě nadbytečných dat. Pokud používáte spolehlivý protokol, zachovají se nadbytečná data poskytovatelem služeb a můžete je načíst voláním ReceiveFrom metody s dostatečnou vyrovnávací pamětí.
Pokud nejsou k dispozici žádná data pro čtení, metoda zablokuje, ReceiveFrom dokud nebudou k dispozici data. Pokud jste v neblokovacím režimu a v 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 k dispozici pro čtení. Pokud Available není nula, 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 navázat připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí připojení vzdáleného hostitele voláním Accept 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 ReceiveFrom metody můžete také vytvořit výchozího vzdáleného 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í kód SocketExceptionchyby, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Po získání tohoto kódu si přečtěte dokumentaci k chybě rozhraní API rozhraní WINDOWS Sockets verze 2 , kde najdete podrobný popis chyby.
Poznámka:
Počet AddressFamilyEndPoint použitých hodnot ReceiveFrom musí odpovídat AddressFamily použitému EndPointSendTo
Poznámka:
Tento člen vypíše informace o trasování, když ve své aplikaci povolíte trasování sítě. Další informace naleznete 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
- 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 o hodnotu vzdáleného partnerského uzlu, 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ě.
Ta Socket byla uzavřena.
Platí pro
ReceiveFrom(Span<Byte>, EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme datagram do vyrovnávací paměti dat 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 stejný EndPoint typ 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ě.
Ta Socket byla uzavřena.
Platí pro
ReceiveFrom(Byte[], EndPoint)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Přijme datagram do vyrovnávací paměti dat 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 stejný EndPoint typ 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ě.
Ta Socket byla 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.
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ů úspěšně přečtených 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í vyžaduje pouze poskytnutí příjmu buffera EndPoint který představuje vzdáleného hostitele. Výchozí hodnota posunu vyrovnávací paměti je 0. Výchozí velikost je délka parametru buffer a socketFlags výchozí Nonehodnota je .
Poznámka:
Před voláním ReceiveFromje nutné explicitně vytvořit vazbu Socket k místnímu koncovému bodu pomocí Bind metody. Pokud ne, ReceiveFrom vyhodí .SocketException
S protokoly ReceiveFrom bez připojení přečte první vyčtený datagram přijatý 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 vyvolá SocketExceptionReceiveFrom . Pokud používáte nespolehlivý protokol, dojde ke ztrátě nadbytečných dat. Pokud používáte spolehlivý protokol, zachovají se nadbytečná data poskytovatelem služeb a můžete je načíst voláním ReceiveFrom metody s dostatečnou vyrovnávací pamětí.
Pokud nejsou k dispozici žádná data pro čtení, metoda zablokuje, ReceiveFrom dokud nebudou k dispozici data. Pokud jste v neblokovacím režimu a v 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 k dispozici pro čtení. Pokud Available není nula, 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 navázat připojení vzdáleného hostitele voláním Connect metody nebo přijmout příchozí připojení vzdáleného hostitele voláním Accept 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 ReceiveFrom metody můžete také vytvořit výchozího vzdáleného 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í nulové bajty.
Poznámka:
Pokud se zobrazí kód SocketExceptionchyby, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Po získání tohoto kódu si přečtěte dokumentaci k chybě rozhraní API rozhraní WINDOWS Sockets verze 2 , kde najdete podrobný popis chyby.
Poznámka:
Počet AddressFamilyEndPoint použitých hodnot ReceiveFrom musí odpovídat AddressFamily použitému EndPointSendTo
Poznámka:
Tento člen vypíše informace o trasování, když ve své aplikaci povolíte trasování sítě. Další informace naleznete v tématu Trasování sítě v rozhraní .NET Framework.