Socket.ReceiveFrom Metoda

Definicja

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

buffer
Byte[]

Tablica typu Byte , która jest lokalizacją 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

buffer to null.

-lub-

remoteEP to null.

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ż

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

buffer
Byte[]

Tablica typu Byte , która jest lokalizacją przechowywania odebranych danych.

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

buffer to null.

-lub-

remoteEP to null.

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ż

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

buffer
Span<Byte>

Zakres bajtów, który jest lokalizacją przechowywania odebranych danych.

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

buffer
Byte[]

Tablica typu Byte , która jest lokalizacją przechowywania odebranych danych.

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

buffer to null.

-lub-

remoteEP to null.

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ż

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

buffer
Span<Byte>

Zakres bajtów, który jest lokalizacją przechowywania odebranych danych.

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

buffer
Span<Byte>

Zakres bajtów, który jest lokalizacją przechowywania odebranych danych.

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

buffer
Byte[]

Tablica typu Byte , która jest lokalizacją przechowywania odebranych danych.

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

buffer to null.

-lub-

remoteEP to null.

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 bufferi , 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.

Zobacz też

Dotyczy