Socket.ReceiveFrom Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Odbiera datagram i przechowuje źródłowy punkt końcowy.
Przeciążenia
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint) |
Odbiera określoną liczbę bajtów do buforu danych przy użyciu określonej wartości SocketFlagsi przechowuje punkt końcowy. |
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint) |
Odbiera określoną liczbę bajtów danych do określonej lokalizacji buforu danych przy użyciu określonej wartości SocketFlagsi przechowuje punkt końcowy. |
ReceiveFrom(Span<Byte>, SocketFlags, EndPoint) |
Odbiera datagram do buforu danych przy użyciu określonej wartości SocketFlagsi przechowuje punkt końcowy. |
ReceiveFrom(Byte[], SocketFlags, EndPoint) |
Odbiera datagram do buforu danych przy użyciu określonej wartości SocketFlagsi przechowuje punkt końcowy. |
ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress) |
Odbiera datagram do buforu danych przy użyciu określonej wartości SocketFlagsi przechowuje punkt końcowy. |
ReceiveFrom(Span<Byte>, EndPoint) |
Odbiera datagram do buforu danych i przechowuje punkt końcowy. |
ReceiveFrom(Byte[], EndPoint) |
Odbiera datagram do buforu danych i przechowuje punkt końcowy. |
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Odbiera określoną liczbę bajtów do buforu danych przy użyciu określonej wartości SocketFlagsi przechowuje punkt końcowy.
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
Liczba bajtów do odebrania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
- remoteEP
- EndPoint
Odwołanie do EndPoint tego samego typu co punkt końcowy hosta zdalnego, który ma zostać zaktualizowany po pomyślnym odebraniu.
Zwraca
Liczba bajtów odebranych.
Wyjątki
size
wartość jest mniejsza niż 0.
-lub-
size
jest większa niż długość obiektu buffer
.
socketFlags
nie jest prawidłową kombinacją wartości.
-lub-
Właściwość nie została ustawiona LocalEndPoint .
-lub-
Wystąpił błąd systemu operacyjnego podczas uzyskiwania dostępu do elementu Socket.
Została zamknięta Socket .
Obiekt wywołujący w stosie wywołań nie ma wymaganych uprawnień.
Przykłady
Poniższy przykład kodu odbiera bez połączenia datagram z hosta zdalnego. Rozmiar buforu ReceiveFrom i SocketFlags są przekazywane do metody .
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
Uwagi
Metoda ReceiveFrom odczytuje dane do parametru buffer
, zwraca liczbę bajtów pomyślnie odczytanych i przechwytuje zdalny punkt końcowy hosta, z którego zostały wysłane dane. Ta metoda jest przydatna, jeśli zamierzasz odbierać bez połączenia datagramy z nieznanego hosta lub wielu hostów.
To przeciążenie wymaga tylko podania buforu odbierania, liczby bajtów, które mają zostać odebrane, niezbędnych SocketFlagsi reprezentujących EndPoint hosta zdalnego. Wartość domyślna przesunięcia buforu to 0.
Przy użyciu protokołów ReceiveFrom bez połączenia odczytuje pierwszy enqueued datagram odebrany do buforu sieci lokalnej. Jeśli otrzymany datagram jest większy niż rozmiar buffer
, metoda wypełni buffer
jak najwięcej komunikatu, jak to możliwe, i zgłosi wartość SocketExceptionReceiveFrom . Jeśli używasz niewiarygodnego protokołu, nadmiar danych zostanie utracony. Jeśli używasz niezawodnego protokołu, nadmiar danych zostanie zachowany przez dostawcę usług i można go pobrać, wywołując ReceiveFrom metodę z wystarczająco dużym buforem.
Jeśli żadne dane nie są dostępne do odczytu, ReceiveFrom metoda zablokuje dostęp do momentu udostępnienia danych. Jeśli korzystasz z trybu nieblokowania i nie ma danych dostępnych w buforze stosu protokołu, ReceiveFrom metoda zostanie ukończona natychmiast i zgłosi wartość SocketException. Możesz użyć Available właściwości , aby określić, czy dane są dostępne do odczytu. Jeśli Available nie ma wartości zero, spróbuj ponownie wykonać operację odbierania.
Chociaż ReceiveFrom jest przeznaczony dla protokołów bez połączenia, można również użyć protokołu zorientowanego na połączenie. Jeśli zdecydujesz się to zrobić, musisz najpierw ustanowić połączenie hosta zdalnego przez wywołanie Connect metody lub zaakceptować przychodzące połączenie hosta zdalnego przez wywołanie Accept metody . Jeśli nie ustanowić lub zaakceptować połączenia przed wywołaniem ReceiveFrom metody, otrzymasz polecenie SocketException. Można również ustanowić domyślny host zdalny dla protokołu bez połączenia przed wywołaniem ReceiveFrom metody.
W przypadku gniazd zorientowanych na połączenie odczyta tyle danych, ReceiveFrom ile jest dostępnych do liczby bajtów określonych przez size
parametr . Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, ReceiveFrom metoda zakończy się natychmiast i zwróci zero bajtów.
Uwaga
Przed wywołaniem metody ReceiveFromnależy jawnie powiązać element z Socket lokalnym punktem końcowym przy użyciu Bind metody . Jeśli tego nie zrobisz, ReceiveFrom zgłosi błąd SocketException. Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Element AddressFamilyEndPoint używany w ReceiveFrom pliku musi być zgodny AddressFamily z wartością używaną EndPoint w SendToelemecie .
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Zobacz też
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Dotyczy
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Odbiera określoną liczbę bajtów danych do określonej lokalizacji bufora danych przy użyciu określonego SocketFlagselementu i przechowuje punkt końcowy.
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
Pozycja w parametrze buffer
do przechowywania odebranych danych.
- size
- Int32
Liczba bajtów do odebrania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
- remoteEP
- EndPoint
Odwołanie do EndPoint tego samego typu co punkt końcowy hosta zdalnego, który ma zostać zaktualizowany po pomyślnym odebraniu.
Zwraca
Liczba bajtów odebranych.
Wyjątki
offset
wartość jest mniejsza niż 0.
-lub-
offset
jest większa niż długość obiektu buffer
.
-lub-
size
wartość jest mniejsza niż 0.
-lub-
size
jest większa niż długość buffer
minus wartości parametru przesunięcia.
socketFlags
nie jest prawidłową kombinacją wartości.
-lub-
Właściwość nie została ustawiona LocalEndPoint .
-lub-
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Została zamknięta Socket .
Przykłady
Poniższy przykład kodu odbiera bez połączenia datagram z hosta zdalnego. Przesunięcie, rozmiar buforu ReceiveFrom i SocketFlags są przekazywane do metody .
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
Uwagi
Metoda ReceiveFrom odczytuje dane do parametru buffer
, zwraca liczbę bajtów pomyślnie odczytanych i przechwytuje zdalny punkt końcowy hosta, z którego zostały wysłane dane. Ta metoda jest przydatna, jeśli zamierzasz odbierać bez połączenia datagramy z nieznanego hosta lub wielu hostów.
Przy użyciu protokołów ReceiveFrom bez połączenia odczytuje pierwszy enqueued datagram odebrany do buforu sieci lokalnej. Jeśli otrzymany datagram jest większy niż rozmiar buffer
, metoda wypełni buffer
jak najwięcej komunikatu, jak to możliwe, i zgłosi wartość SocketExceptionReceiveFrom . Jeśli używasz niewiarygodnego protokołu, nadmiar danych zostanie utracony. Jeśli używasz niezawodnego protokołu, nadmiar danych zostanie zachowany przez dostawcę usług i można go pobrać, wywołując ReceiveFrom metodę z wystarczająco dużym buforem.
Jeśli żadne dane nie są dostępne do odczytu, ReceiveFrom metoda zablokuje dostęp do momentu udostępnienia danych. Jeśli korzystasz z trybu nieblokowania i nie ma danych dostępnych w buforze stosu protokołu, ReceiveFrom metoda zostanie ukończona natychmiast i zgłosi wartość SocketException. Możesz użyć Available właściwości , aby określić, czy dane są dostępne do odczytu. Jeśli Available nie ma wartości zero, spróbuj ponownie wykonać operację odbierania.
Chociaż ReceiveFrom jest przeznaczony dla protokołów bez połączenia, można również użyć protokołu zorientowanego na połączenie. Jeśli zdecydujesz się to zrobić, musisz najpierw ustanowić połączenie hosta zdalnego przez wywołanie Connect metody lub zaakceptować przychodzące połączenie hosta zdalnego przez wywołanie Accept metody . Jeśli nie ustanowisz lub nie zaakceptujesz połączenia przed wywołaniem ReceiveFrom metody , otrzymasz wartość SocketException. Możesz również ustanowić domyślnego hosta zdalnego dla protokołu bez połączenia przed wywołaniem ReceiveFrom metody .
W przypadku gniazd zorientowanych na połączenie odczytuje tyle danych, ReceiveFrom ile jest dostępnych do ilości bajtów określonych przez size
parametr . Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, ReceiveFrom metoda zakończy się natychmiast i zwróci zero bajtów.
Uwaga
Przed wywołaniem ReceiveFrommetody należy jawnie powiązać element z Socket lokalnym punktem końcowym przy użyciu Bind metody . Jeśli tego nie zrobisz, ReceiveFrom wyrzuć wartość SocketException. Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Parametr AddressFamily używany w ReceiveFrom programie musi być zgodny AddressFamily z wartością użytą w SendToelemEndPoint.EndPoint
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Zobacz też
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Dotyczy
ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Odbiera datagram do bufora danych przy użyciu określonego SocketFlagselementu i przechowuje punkt końcowy.
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
Bitowa kombinacja SocketFlags wartości.
- remoteEP
- EndPoint
Odwołanie do EndPoint tego samego typu co punkt końcowy hosta zdalnego, który ma zostać zaktualizowany po pomyślnym odebraniu.
Zwraca
Liczba bajtów odebranych.
Wyjątki
remoteEP
to null
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Dotyczy
ReceiveFrom(Byte[], SocketFlags, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Odbiera datagram do bufora danych przy użyciu określonego SocketFlagselementu i przechowuje punkt końcowy.
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
Bitowa kombinacja SocketFlags wartości.
- remoteEP
- EndPoint
Odwołanie do EndPoint tego samego typu co punkt końcowy hosta zdalnego, który ma zostać zaktualizowany po pomyślnym odebraniu.
Zwraca
Liczba bajtów odebranych.
Wyjątki
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Obiekt wywołujący w stosie wywołań nie ma wymaganych uprawnień.
Przykłady
Poniższy przykład kodu odbiera datagram bez połączenia z hosta zdalnego. SocketFlags są przekazywane do ReceiveFrom metody .
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
Uwagi
Metoda ReceiveFrom odczytuje dane do parametru buffer
, zwraca liczbę bajtów pomyślnie odczytanych i przechwytuje zdalny punkt końcowy hosta, z którego zostały wysłane dane. Ta metoda jest przydatna, jeśli zamierzasz odbierać bez połączenia datagramy z nieznanego hosta lub wielu hostów.
To przeciążenie wymaga tylko podania buforu odbioru, niezbędnego SocketFlagselementu i , EndPoint który reprezentuje hosta zdalnego. Wartość domyślna przesunięcia to 0, a rozmiar jest domyślnie ustawiony na długość parametru buforu.
Uwaga
Przed wywołaniem ReceiveFrommetody należy jawnie powiązać element z Socket lokalnym punktem końcowym przy użyciu Bind metody . Jeśli tego nie zrobisz, ReceiveFrom wyrzuć wartość SocketException.
W przypadku protokołów ReceiveFrom bez połączenia odczytuje pierwszy w kolejce datagram otrzymany do buforu sieci lokalnej. Jeśli otrzymany datagram jest większy niż rozmiar buffer
, metoda wypełni buffer
maksymalną część komunikatu, jak to możliwe, i zgłosi wartość SocketExceptionReceiveFrom . Jeśli używasz zawodnego protokołu, nadmiar danych zostanie utracony. Jeśli używasz niezawodnego protokołu, nadmiar danych zostanie zachowany przez dostawcę usług i można go pobrać, wywołując ReceiveFrom metodę z wystarczająco dużym buforem.
Jeśli do odczytu nie są dostępne żadne dane, ReceiveFrom metoda zablokuje dane do momentu udostępnienia danych. Jeśli jesteś w trybie nieblokowania i nie ma dostępnych danych w buforze stosu protokołu, ReceiveFrom metoda zostanie ukończona natychmiast i zgłosi wyjątek SocketException. Możesz użyć Available właściwości , aby określić, czy dane są dostępne do odczytu. Jeśli Available wartość jest inna niż zero, spróbuj ponownie wykonać operację odbierania.
Chociaż ReceiveFrom jest przeznaczony dla protokołów bez połączenia, można również użyć protokołu zorientowanego na połączenie. Jeśli zdecydujesz się to zrobić, musisz najpierw ustanowić połączenie hosta zdalnego przez wywołanie Connect metody lub zaakceptować przychodzące połączenie hosta zdalnego przez wywołanie Accept metody . Jeśli nie ustanowisz lub nie zaakceptujesz połączenia przed wywołaniem ReceiveFrom metody , otrzymasz wartość SocketException. Możesz również ustanowić domyślnego hosta zdalnego dla protokołu bez połączenia przed wywołaniem ReceiveFrom metody .
W przypadku gniazd zorientowanych na połączenie odczytuje tyle danych, ReceiveFrom ile jest dostępnych do rozmiaru buffer
. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, ReceiveFrom metoda zakończy się natychmiast i zwróci zero bajtów.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Parametr AddressFamily używany w ReceiveFrom programie musi być zgodny AddressFamily z wartością użytą w SendToelemEndPoint.EndPoint
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.
Zobacz też
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Dotyczy
ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Odbiera datagram do bufora danych przy użyciu określonego SocketFlagselementu i przechowuje punkt końcowy.
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
Bitowa kombinacja SocketFlags wartości.
- receivedAddress
- SocketAddress
SocketAddress Wystąpienie, które jest aktualizowane przy użyciu wartości zdalnego elementu równorzędnego po zdaniu tej metody.
Zwraca
Liczba bajtów odebranych.
Wyjątki
receivedAddress
to null
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Dotyczy
ReceiveFrom(Span<Byte>, EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Odbiera datagram do bufora danych i przechowuje punkt końcowy.
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
Odwołanie do EndPoint tego samego typu co punkt końcowy hosta zdalnego, który ma zostać zaktualizowany po pomyślnym odebraniu.
Zwraca
Liczba bajtów odebranych.
Wyjątki
remoteEP
to null
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Dotyczy
ReceiveFrom(Byte[], EndPoint)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Odbiera datagram do buforu danych i przechowuje punkt końcowy.
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
Odwołanie do EndPoint tego samego typu co punkt końcowy hosta zdalnego, który ma zostać zaktualizowany po pomyślnym odebraniu.
Zwraca
Liczba bajtów odebranych.
Wyjątki
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Obiekt wywołujący w stosie wywołań nie ma wymaganych uprawnień.
Przykłady
Poniższy przykład kodu odbiera datagram bez połączenia z hosta zdalnego.
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
Uwagi
Metoda ReceiveFrom odczytuje dane do parametru buffer
, zwraca liczbę bajtów pomyślnie odczytanych i przechwytuje zdalny punkt końcowy hosta, z którego zostały wysłane dane. Ta metoda jest przydatna, jeśli zamierzasz odbierać bez połączenia datagramy z nieznanego hosta lub wielu hostów.
To przeciążenie wymaga tylko podania odbioru buffer
i , EndPoint który reprezentuje hosta zdalnego. Wartość domyślna przesunięcia buforu to 0. Rozmiar jest domyślnie ustawiony na długość parametru buffer
i wartość domyślną socketFlags
.None
Uwaga
Przed wywołaniem ReceiveFrommetody należy jawnie powiązać element z Socket lokalnym punktem końcowym przy użyciu Bind metody . Jeśli tego nie zrobisz, ReceiveFrom wyrzuć wartość SocketException.
W przypadku protokołów ReceiveFrom bez połączenia odczytuje pierwszy w kolejce datagram otrzymany do buforu sieci lokalnej. Jeśli otrzymany datagram jest większy niż rozmiar buffer
, metoda wypełni buffer
jak najwięcej komunikatu, jak to możliwe, i zgłosi wartość SocketExceptionReceiveFrom . Jeśli używasz niewiarygodnego protokołu, nadmiar danych zostanie utracony. Jeśli używasz niezawodnego protokołu, nadmiar danych zostanie zachowany przez dostawcę usług i można go pobrać, wywołując ReceiveFrom metodę z wystarczająco dużym buforem.
Jeśli żadne dane nie są dostępne do odczytu, ReceiveFrom metoda zablokuje dostęp do momentu udostępnienia danych. Jeśli korzystasz z trybu nieblokowania i nie ma danych dostępnych w buforze stosu protokołu, ReceiveFrom metoda zostanie ukończona natychmiast i zgłosi wartość SocketException. Możesz użyć Available właściwości , aby określić, czy dane są dostępne do odczytu. Jeśli Available nie ma wartości zero, spróbuj ponownie wykonać operację odbierania.
Chociaż ReceiveFrom jest przeznaczony dla protokołów bez połączenia, można również użyć protokołu zorientowanego na połączenie. Jeśli zdecydujesz się to zrobić, musisz najpierw ustanowić połączenie hosta zdalnego przez wywołanie Connect metody lub zaakceptować przychodzące połączenie hosta zdalnego przez wywołanie Accept metody . Jeśli nie ustanowić lub zaakceptować połączenia przed wywołaniem ReceiveFrom metody, otrzymasz polecenie SocketException. Można również ustanowić domyślny host zdalny dla protokołu bez połączenia przed wywołaniem ReceiveFrom metody.
W przypadku gniazd zorientowanych na połączenie odczyta tyle danych, ReceiveFrom ile jest dostępnych do rozmiaru elementu buffer
. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, ReceiveFrom metoda zakończy się natychmiast i zwróci zero bajtów.
Uwaga
Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Element AddressFamilyEndPoint używany w ReceiveFrom pliku musi być zgodny AddressFamily z wartością używaną EndPoint w SendToelemecie .
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.