Udostępnij za pośrednictwem


Socket.Receive Metoda

Definicja

Odbiera dane z powiązanego Socketelementu .

Przeciążenia

Receive(Byte[], Int32, Int32, SocketFlags, SocketError)

Odbiera dane z powiązanego Socket do bufora odbioru przy użyciu określonego SocketFlagselementu .

Receive(Span<Byte>, SocketFlags, SocketError)

Odbiera dane z powiązanego Socket do bufora odbioru przy użyciu określonego SocketFlagselementu .

Receive(IList<ArraySegment<Byte>>, SocketFlags, SocketError)

Odbiera dane z powiązanej Socket z listą buforów odbioru przy użyciu określonego SocketFlagselementu .

Receive(Byte[], Int32, SocketFlags)

Odbiera określoną liczbę bajtów danych z powiązanego Socket do bufora odbioru przy użyciu określonego SocketFlags.

Receive(Span<Byte>, SocketFlags)

Odbiera dane z powiązanego Socket do bufora odbioru przy użyciu określonego SocketFlagselementu .

Receive(Byte[], Int32, Int32, SocketFlags)

Odbiera określoną liczbę bajtów z powiązanej Socket do określonej pozycji przesunięcia bufora odbioru przy użyciu określonego SocketFlags.

Receive(Byte[], SocketFlags)

Odbiera dane z powiązanego Socket do bufora odbioru przy użyciu określonego SocketFlagselementu .

Receive(Span<Byte>)

Odbiera dane z powiązanego Socket do buforu odbioru.

Receive(IList<ArraySegment<Byte>>)

Odbiera dane z powiązanej Socket listy buforów odbioru.

Receive(Byte[])

Odbiera dane z powiązanego Socket do buforu odbioru.

Receive(IList<ArraySegment<Byte>>, SocketFlags)

Odbiera dane z powiązanej Socket z listą buforów odbioru przy użyciu określonego SocketFlagselementu .

Receive(Byte[], Int32, Int32, SocketFlags, SocketError)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera dane z powiązanego Socket do bufora odbioru przy użyciu określonego SocketFlagselementu .

public:
 int Receive(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Receive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Receive : byte[] * int * int * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Receive (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef errorCode As SocketError) 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.

errorCode
SocketError

SocketError Obiekt, który przechowuje błąd gniazda.

Zwraca

Liczba bajtów odebranych.

Wyjątki

buffer to null.

offset wartość jest mniejsza niż 0.

-lub-

offsetjest większa niż długość .buffer

-lub-

size wartość jest mniejsza niż 0.

-lub-

size jest większa niż długość buffer odmętą wartości parametru offset .

Element Socket został zamknięty.

Obiekt wywołujący w stosie wywołań nie ma wymaganych uprawnień.

Uwagi

Metoda Receive odczytuje dane do parametru buforu i zwraca liczbę bajtów pomyślnie odczytanych. Można wywoływać Receive zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać Connect metodę w celu nawiązania połączenia hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem metody Receive. Metoda Receive odczytuje tylko dane pochodzące z hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwi odbieranie danych przychodzących z dowolnego hosta.

Jeśli do odczytu nie są dostępne żadne dane, Receive metoda będzie blokować dane do momentu udostępnienia danych, chyba że ustawiono wartość limitu czasu przy użyciu polecenia Socket.ReceiveTimeout. Jeśli wartość limitu czasu została przekroczona, Receive wywołanie zwróci SocketExceptionwartość . Jeśli jesteś w trybie nieblokowania i nie ma dostępnych danych w buforze stosu protokołu, Receive metoda zostanie ukończona natychmiast i zgłosi wyjątek SocketException. Wystąpił błąd podczas próby uzyskania dostępu do gniazda. Zobacz uwagi poniżej. 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.

Jeśli używasz połączenia zorientowanego na Socketpołączenie, Receive metoda odczytuje tyle danych, ile jest dostępnych, do liczby bajtów określonych przez parametr rozmiaru. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zostanie ukończona natychmiast i zwróci zero bajtów.

Jeśli używasz bez połączenia Socket, Receive odczytuje pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffer parametru, buffer zostaje wypełniony pierwszą częścią komunikatu, nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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

Receive(Span<Byte>, SocketFlags, SocketError)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera dane z powiązanego Socket do bufora odbioru przy użyciu określonego SocketFlagselementu .

public:
 int Receive(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Receive (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Receive : Span<byte> * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Receive (buffer As Span(Of Byte), socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer

Parametry

buffer
Span<Byte>

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

socketFlags
SocketFlags

Bitowa kombinacja wartości wyliczenia, która określa zachowania wysyłania i odbierania.

errorCode
SocketError

Gdy ta metoda zwraca wartość , zawiera jedną z wartości wyliczenia, która definiuje kody błędów dla gniazda.

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ń.

Uwagi

Metoda Receive odczytuje dane do parametru buforu i zwraca liczbę bajtów pomyślnie odczytanych. Można wywoływać Receive zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

To przeciążenie wymaga tylko podania buforu odbioru. Przesunięcie buforu domyślnie wynosi 0, rozmiar jest domyślnie ustawiony na długość parametru buforu, a SocketFlags wartość domyślna to None.

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać Connect metodę w celu nawiązania połączenia zdalnego hosta lub Accept zaakceptować połączenie przychodzące przed wywołaniem metody Receive. Metoda Receive odczytuje tylko dane pochodzące z hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwi odbieranie danych przychodzących z dowolnego hosta.

Jeśli do odczytu nie są dostępne żadne dane, Receive metoda będzie blokować dane do momentu udostępnienia danych, chyba że ustawiono wartość limitu czasu przy użyciu polecenia Socket.ReceiveTimeout. Po przekroczeniu Receive limitu czasu wywołanie zwróci SocketExceptionwartość . Jeśli jesteś w trybie nieblokowania i nie ma dostępnych danych w buforze stosu protokołu, Receive 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.

Jeśli używasz połączenia zorientowanego na Socketpołączenie, Receive metoda odczytuje tyle danych, ile jest dostępnych, aż do rozmiaru buforu. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zostanie ukończona natychmiast i zwróci zero bajtów.

Jeśli używasz bez Socketpołączenia, Receive odczytuje pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffer parametru, buffer zostaje wypełniony pierwszą częścią komunikatu, nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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

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

Receive(IList<ArraySegment<Byte>>, SocketFlags, SocketError)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera dane z powiązanej Socket listy buforów odbierania przy użyciu określonego SocketFlagselementu .

public:
 int Receive(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Receive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Receive : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Receive (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer

Parametry

buffers
IList<ArraySegment<Byte>>

Lista typówArraySegment<T>Byte, które zawierają odebrane dane.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

errorCode
SocketError

SocketError Obiekt, który przechowuje błąd gniazda.

Zwraca

Liczba bajtów odebranych.

Wyjątki

buffers to null.

-lub-

buffers. Liczba jest równa zero.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Element Socket został zamknięty.

Uwagi

Ta metoda odczytuje dane do parametru buffers i zwraca liczbę bajtów, które zostały pomyślnie odczytane. Można wywołać zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

To przeciążenie wymaga podania co najmniej jednego buforu odbierania. Wartość domyślna SocketFlagsNoneto .

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać wywołanie Connect , aby nawiązać połączenie hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem Receivemetody . Metoda Receive będzie odczytywać tylko dane pochodzące z połączenia hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwia odbieranie danych przychodzących z dowolnego hosta.

Jeśli żadne dane nie są dostępne do odczytu, Receive metoda zablokuje dostęp do momentu udostępnienia danych, chyba że wartość limitu czasu została ustawiona przy użyciu polecenia Socket.ReceiveTimeout. Jeśli przekroczono limit czasu, Receive wywołanie zgłasza błąd SocketException. Jeśli korzystasz z trybu nieblokowania i nie ma danych dostępnych w buforze stosu protokołu, Receive 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.

Jeśli używasz połączenia zorientowanego Socketna połączenie, Receive metoda odczytuje tyle danych, ile jest dostępnych, do rozmiaru buforu. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zakończy się natychmiast i zwróci zero bajtów.

Jeśli używasz bez Socketpołączenia,Receive odczyta pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffers parametru, zostanie wypełniony pierwszą częścią komunikatu, buffers nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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

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

Receive(Byte[], Int32, SocketFlags)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera określoną liczbę bajtów danych z powiązanego Socket do buforu odbierania przy użyciu określonego SocketFlagselementu .

public:
 int Receive(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : byte[] * int * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffer As Byte(), size As Integer, socketFlags As SocketFlags) 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.

Zwraca

Liczba bajtów odebranych.

Wyjątki

buffer to null.

size przekracza rozmiar elementu buffer.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Obiekt wywołujący w stosie wywołań nie ma wymaganych uprawnień.

Przykłady

Następujące dane są odbierane do bufferelementu i określa None wartość SocketFlags.

// Receive the host home page content and loop until all the data is received.
Int32 bytes = s->Receive( RecvBytes, RecvBytes->Length, SocketFlags::None );
strRetPage =  "Default HTML page on ";
strRetPage->Concat( server,  ":\r\n", ASCII->GetString( RecvBytes, 0, bytes ) );
while ( bytes > 0 )
{
   bytes = s->Receive( RecvBytes, RecvBytes->Length, SocketFlags::None );
   strRetPage->Concat( ASCII->GetString( RecvBytes, 0, bytes ) );
}

// Receive the host home page content and loop until all the data is received.
Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
strRetPage = "Default HTML page on " + server + ":\r\n";
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);

while (bytes > 0)
{
  bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
  strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
}

' Receive the host home page content and loop until all the data is received.

'Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)
Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)

strRetPage = "Default HTML page on " + server + ":\r\n"
strRetPage = "Default HTML page on " + server + ":" + ControlChars.Lf + ControlChars.NewLine

Dim i As Integer

While bytes > 0

  bytes = s.Receive(RecvBytes, RecvBytes.Length, 0)

  strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes)

End While

Uwagi

Metoda Receive odczytuje dane do parametru buffer i zwraca liczbę bajtów, które zostały pomyślnie odczytane. Można wywołać Receive zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

To przeciążenie wymaga tylko podania buforu odbioru, liczby bajtów, które mają zostać odebrane, oraz niezbędnej SocketFlagswartości .

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać wywołanie Connect , aby nawiązać połączenie hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem Receivemetody . Metoda Receive będzie odczytywać tylko dane pochodzące z hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwia odbieranie danych przychodzących z dowolnego hosta.

Jeśli żadne dane nie są dostępne do odczytu, Receive metoda zablokuje dostęp do momentu udostępnienia danych, chyba że wartość limitu czasu została ustawiona przy użyciu polecenia Socket.ReceiveTimeout. Jeśli przekroczono limit czasu, Receive wywołanie zwróci wartość SocketException. Jeśli korzystasz z trybu nieblokowania i nie ma dostępnych danych w buforze stosu protokołu, Receive metoda zakończy się natychmiast i zgłosi błąd 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.

Jeśli używasz połączenia zorientowanego Socketna połączenie, Receive metoda odczytuje tyle danych, 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, Receive metoda zakończy się natychmiast i zwróci zero bajtów.

Jeśli używasz bez Socketpołączenia, Receive odczyta pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffer parametru, zostanie wypełniony pierwszą częścią komunikatu, buffer nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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

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

Receive(Span<Byte>, SocketFlags)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera dane z powiązanego Socket do buforu odbierania przy użyciu określonego SocketFlagselementu .

public:
 int Receive(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : Span<byte> * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffer As Span(Of Byte), socketFlags As SocketFlags) As Integer

Parametry

buffer
Span<Byte>

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

socketFlags
SocketFlags

Bitowa kombinacja wartości wyliczenia, która określa zachowania wysyłania i odbierania.

Zwraca

Liczba bajtów odebranych.

Wyjątki

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Obiekt wywołujący w stosie wywołań nie ma wymaganych uprawnień.

Uwagi

Metoda Receive odczytuje dane do parametru buforu i zwraca liczbę bajtów pomyślnie odczytanych. Można wywołać Receive zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

To przeciążenie wymaga tylko podania buforu odbioru. Przesunięcie buforu jest domyślnie równe 0, rozmiar jest domyślnie ustawiony na długość parametru buforu, a wartość domyślna SocketFlags to None.

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać wywołanie Connect , aby nawiązać połączenie hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem Receivemetody . Metoda Receive będzie odczytywać tylko dane pochodzące z hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwia odbieranie danych przychodzących z dowolnego hosta.

Jeśli żadne dane nie są dostępne do odczytu, Receive metoda zablokuje dostęp do momentu udostępnienia danych, chyba że wartość limitu czasu została ustawiona przy użyciu polecenia Socket.ReceiveTimeout. Po przekroczeniu Receive limitu czasu wywołanie zwróci wartość SocketException. Jeśli korzystasz z trybu nieblokowania i nie ma dostępnych danych w buforze stosu protokołu, Receive metoda zostanie zakoń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.

Jeśli używasz połączenia zorientowanego Socketna połączenie, Receive metoda odczytuje tyle danych, ile jest dostępnych, do rozmiaru buforu. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zakończy się natychmiast i zwróci zero bajtów.

Jeśli używasz bez połączenia Socket, Receive odczyta pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffer parametru, zostanie wypełniony pierwszą częścią komunikatu, buffer nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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.

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

Receive(Byte[], Int32, Int32, SocketFlags)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera określoną liczbę bajtów od powiązanej Socket do określonej pozycji przesunięcia buforu odbierania przy użyciu określonego SocketFlagsparametru .

public:
 int Receive(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : byte[] * int * int * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags) As Integer

Parametry

buffer
Byte[]

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

offset
Int32

Lokalizacja do buffer przechowywania odebranych danych.

size
Int32

Liczba bajtów do odebrania.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

Zwraca

Liczba bajtów odebranych.

Wyjątki

buffer 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 offset .

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 określa bufor danych, przesunięcie, rozmiar i flagę gniazda przed odebraniem danych na połączonym obiekcie Socket.

// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
int SendReceiveTest4( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      
      // Blocks until send returns.
      int byteCount = server->Send( msg, 0, msg->Length, SocketFlags::None );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes, 0, server->Available,
         SocketFlags::None );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine(  "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
      return (e->ErrorCode);
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
public static int SendReceiveTest4(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try
    {
        // Blocks until send returns.
        int byteCount = server.Send(msg, 0, msg.Length, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", byteCount);

        // Get reply from the server.
        byteCount = server.Receive(bytes, 0, bytes.Length, SocketFlags.None);

        if (byteCount > 0)
            Console.WriteLine(Encoding.UTF8.GetString(bytes, 0, byteCount));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer, offset, message size, and socket flags.
Public Shared Function SendReceiveTest4(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim byteCount As Integer = server.Send(msg, 0, msg.Length, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", byteCount)
        
        ' Get reply from the server.
        byteCount = server.Receive(bytes, 0, server.Available, SocketFlags.None)
        
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest4

Uwagi

Metoda Receive odczytuje dane do parametru buforu i zwraca liczbę bajtów pomyślnie odczytanych. Można wywołać Receive zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać wywołanie Connect , aby nawiązać połączenie hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem Receivemetody . Metoda Receive będzie odczytywać tylko dane pochodzące z hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwia odbieranie danych przychodzących z dowolnego hosta.

Jeśli żadne dane nie są dostępne do odczytu, Receive metoda zablokuje dostęp do momentu udostępnienia danych, chyba że wartość limitu czasu została ustawiona przy użyciu polecenia Socket.ReceiveTimeout. Jeśli przekroczono limit czasu, Receive wywołanie zwróci wartość SocketException. Jeśli korzystasz z trybu nieblokowania i nie ma danych dostępnych w buforze stosu protokołu, Receive metoda zostanie ukończona natychmiast i zgłosi wartość SocketException. Wystąpił błąd podczas próby uzyskania dostępu do gniazda. Zobacz uwagi poniżej. 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.

Jeśli używasz połączenia zorientowanego Socketna połączenie, Receive metoda odczytuje tyle danych, ile jest dostępnych, do liczby bajtów określonych przez parametr rozmiaru. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zakończy się natychmiast i zwróci zero bajtów.

Jeśli używasz bez Socketpołączenia, Receive odczyta pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffer parametru, zostanie wypełniony pierwszą częścią komunikatu, buffer nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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

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

Receive(Byte[], SocketFlags)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera dane z powiązanego Socket do buforu odbierania przy użyciu określonego SocketFlagselementu .

public:
 int Receive(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : byte[] * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffer As Byte(), socketFlags As SocketFlags) As Integer

Parametry

buffer
Byte[]

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

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

Zwraca

Liczba bajtów odebranych.

Wyjątki

buffer to null.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Obiekt wywołujący w stosie wywołań nie ma wymaganych uprawnień.

Przykłady

Poniższy przykład kodu określa bufor danych i SocketFlags do odbierania danych w połączonym obiekcie Socket.

// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
int SendReceiveTest2( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      // Blocks until send returns.
      int byteCount = server->Send( msg, SocketFlags::None );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes, SocketFlags::None );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
      return (e->ErrorCode);
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
public static int SendReceiveTest2(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try
    {
        // Blocks until send returns.
        int byteCount = server.Send(msg, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", byteCount);

        // Get reply from the server.
        byteCount = server.Receive(bytes, SocketFlags.None);
        if (byteCount > 0)
            Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer and socket flags.
Public Shared Function SendReceiveTest2(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim byteCount As Integer = server.Send(msg, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", byteCount)
        
        ' Get reply from the server.
        byteCount = server.Receive(bytes, SocketFlags.None)
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest2

Uwagi

Metoda Receive odczytuje dane do parametru buforu i zwraca liczbę bajtów pomyślnie odczytanych. Można wywołać Receive zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

To przeciążenie wymaga tylko podania buforu odbioru i niezbędnego SocketFlagselementu . Przesunięcie buforu domyślnie wynosi 0, a rozmiar jest domyślnie ustawiony na długość parametru bajtowego.

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać wywołanie Connect , aby nawiązać połączenie hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem Receivemetody . Metoda Receive będzie odczytywać tylko dane pochodzące z hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwia odbieranie danych przychodzących z dowolnego hosta.

Jeśli żadne dane nie są dostępne do odczytu, Receive 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, Receive 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.

Jeśli używasz połączenia zorientowanego Socketna połączenie, Receive metoda odczytuje tyle danych, ile jest dostępnych do rozmiaru buforu. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zakończy się natychmiast i zwróci zero bajtów.

Jeśli używasz bez Socketpołączenia, Receive odczyta pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffer parametru, zostanie wypełniony pierwszą częścią komunikatu, buffer nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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

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

Receive(Span<Byte>)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera dane z powiązanego Socket do buforu odbierania.

public:
 int Receive(Span<System::Byte> buffer);
public int Receive (Span<byte> buffer);
member this.Receive : Span<byte> -> int
Public Function Receive (buffer As Span(Of Byte)) As Integer

Parametry

buffer
Span<Byte>

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

Zwraca

Liczba bajtów odebranych.

Wyjątki

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Obiekt wywołujący w stosie wywołań nie ma wymaganych uprawnień.

Uwagi

Metoda Receive odczytuje dane do parametru buforu i zwraca liczbę bajtów pomyślnie odczytanych. Można wywołać Receive zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

To przeciążenie wymaga tylko podania buforu odbioru. Przesunięcie buforu jest domyślnie równe 0, rozmiar jest domyślnie ustawiony na długość parametru buforu, a wartość domyślna SocketFlags to None.

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać wywołanie Connect , aby nawiązać połączenie hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem metody Receive. Metoda Receive będzie odczytywać tylko dane pochodzące z hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwia odbieranie danych przychodzących z dowolnego hosta.

Jeśli żadne dane nie są dostępne do odczytu, Receive metoda zablokuje dostęp do momentu udostępnienia danych, chyba że wartość limitu czasu została ustawiona przy użyciu polecenia Socket.ReceiveTimeout. Po przekroczeniu Receive limitu czasu wywołanie zwróci wartość SocketException. Jeśli korzystasz z trybu nieblokowania i nie ma dostępnych danych w buforze stosu protokołu, Receive metoda zostanie zakoń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.

Jeśli używasz połączenia zorientowanego Socketna połączenie, Receive metoda odczytuje tyle danych, ile jest dostępnych, do rozmiaru buforu. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zakończy się natychmiast i zwróci zero bajtów.

Jeśli używasz bez połączenia Socket, Receive odczyta pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffer parametru, zostanie wypełniony pierwszą częścią komunikatu, buffer nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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.

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

Receive(IList<ArraySegment<Byte>>)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera dane z powiązanej Socket listy buforów odbioru.

public:
 int Receive(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers);
public int Receive (System.Collections.Generic.IList<ArraySegment<byte>> buffers);
member this.Receive : System.Collections.Generic.IList<ArraySegment<byte>> -> int
Public Function Receive (buffers As IList(Of ArraySegment(Of Byte))) As Integer

Parametry

buffers
IList<ArraySegment<Byte>>

Lista ArraySegment<T>typów Byte , które zawierają odebrane dane.

Zwraca

Liczba bajtów odebranych.

Wyjątki

Parametr buffer to null.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Uwagi

Ta metoda odczytuje dane do parametru buforów i zwraca liczbę bajtów, które zostały pomyślnie odczytane. Można wywołać zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

To przeciążenie wymaga podania co najmniej jednego buforu odbierania.

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać wywołanie Connect , aby nawiązać połączenie hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem Receivemetody . Metoda Receive odczytuje tylko dane pochodzące z połączenia hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwi odbieranie danych przychodzących z dowolnego hosta.

Jeśli do odczytu nie są dostępne żadne dane, Receive metoda będzie blokować dane do momentu udostępnienia danych, chyba że ustawiono wartość limitu czasu przy użyciu polecenia Socket.ReceiveTimeout. Jeśli wartość limitu czasu została przekroczona, Receive wywołanie zwróci SocketExceptionwartość . Jeśli jesteś w trybie nieblokowania i nie ma dostępnych danych w buforze stosu protokołu, Receive 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.

Jeśli używasz zorientowanego na Socketpołączenie , Receive metoda odczytuje tyle danych, ile jest dostępnych, aż do rozmiaru buforu. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zostanie ukończona natychmiast i zwróci zero bajtów.

Jeśli używasz bez połączenia Socket, Receive odczytuje pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffers parametru, buffers zostaje wypełniony pierwszą częścią komunikatu, nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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 Ten element członkowski generuje informacje śledzenia po włączeniu śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Dotyczy

Receive(Byte[])

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera dane z powiązanego Socket do buforu odbioru.

public:
 int Receive(cli::array <System::Byte> ^ buffer);
public int Receive (byte[] buffer);
member this.Receive : byte[] -> int
Public Function Receive (buffer As Byte()) As Integer

Parametry

buffer
Byte[]

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

Zwraca

Liczba bajtów odebranych.

Wyjątki

buffer 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 dane na połączonym Socketobiekcie .

// Displays sending with a connected socket
// using the overload that takes a buffer.
int SendReceiveTest1( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      // Blocks until send returns.
      int byteCount = server->Send( msg );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
      return ( e->ErrorCode );
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer.
public static int SendReceiveTest1(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try
    {
        // Blocks until send returns.
        int i = server.Send(msg);
        Console.WriteLine("Sent {0} bytes.", i);

        // Get reply from the server.
        i = server.Receive(bytes);
        Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer.
Public Shared Function SendReceiveTest1(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim i As Integer = server.Send(msg)
        Console.WriteLine("Sent {0} bytes.", i)
        
        ' Get reply from the server.
        i = server.Receive(bytes)
        Console.WriteLine(Encoding.UTF8.GetString(bytes))
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest1

Uwagi

Metoda Receive odczytuje dane do parametru buforu i zwraca liczbę bajtów pomyślnie odczytanych. Można wywoływać Receive zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

To przeciążenie wymaga tylko podania buforu odbioru. Przesunięcie buforu domyślnie wynosi 0, rozmiar jest domyślnie ustawiony na długość parametru buforu, a SocketFlags wartość domyślna to None.

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać Connect metodę w celu nawiązania połączenia hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem metody Receive. Metoda Receive odczytuje tylko dane pochodzące z hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwi odbieranie danych przychodzących z dowolnego hosta.

Jeśli do odczytu nie są dostępne żadne dane, Receive metoda będzie blokować dane do momentu udostępnienia danych, chyba że ustawiono wartość limitu czasu przy użyciu polecenia Socket.ReceiveTimeout. Jeśli wartość limitu czasu została przekroczona, Receive wywołanie zwróci SocketExceptionwartość . Jeśli jesteś w trybie nieblokowania i nie ma dostępnych danych w buforze stosu protokołu, Receive 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.

Jeśli używasz zorientowanego na Socketpołączenie , Receive metoda odczytuje tyle danych, ile jest dostępnych, aż do rozmiaru buforu. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zostanie ukończona natychmiast i zwróci zero bajtów.

Jeśli używasz bez połączenia Socket, Receive odczytuje pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffer parametru, buffer zostaje wypełniony pierwszą częścią komunikatu, nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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

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

Receive(IList<ArraySegment<Byte>>, SocketFlags)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Odbiera dane z powiązanej Socket z listą buforów odbioru przy użyciu określonego SocketFlagselementu .

public:
 int Receive(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags) As Integer

Parametry

buffers
IList<ArraySegment<Byte>>

Lista typówArraySegment<T>Byte, które zawierają odebrane dane.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

Zwraca

Liczba bajtów odebranych.

Wyjątki

buffers to null.

-lub-

buffers. Liczba jest równa zero.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Element Socket został zamknięty.

Przykłady

W poniższym przykładzie kodu pokazano, jak odbierać dane na połączonym obiekcie Socket.


// Build the buffers for the receive.
List<ArraySegment<Byte> >^ receiveBuffers = 
    gcnew List<ArraySegment<Byte> >(2);

array<Byte>^ bigBuffer = gcnew array<Byte>(1024);

// Specify the first buffer segment (2 bytes, starting 
// at the 4th element of bigBuffer)
receiveBuffers->Add(ArraySegment<Byte>(bigBuffer, 4, 2));

// Specify the second buffer segment (500 bytes, starting
// at the 20th element of bigBuffer)
receiveBuffers->Add(
    ArraySegment<Byte>(bigBuffer, 20, 500));

tcpSocket->Receive(receiveBuffers);

Console::WriteLine("{0}", 
    asciiEncoding->GetString(bigBuffer));

// Build the buffers for the receive.
List<ArraySegment<byte>> recvBuffers =
                         new List<ArraySegment<byte>>(2);

byte[] bigBuffer = new byte[1024];

// Specify the first buffer segment (2 bytes, starting
// at the 4th element of bigBuffer)
recvBuffers.Add(new ArraySegment<byte>(bigBuffer, 4, 2));

// Specify the second buffer segment (500 bytes, starting
// at the 20th element of bigBuffer)
recvBuffers.Add(new ArraySegment<byte>(bigBuffer, 20, 500));

int bytesReceived = mySocket.Receive(recvBuffers);

Console.WriteLine("{0}", ASCII.GetString(bigBuffer));

Uwagi

Ta metoda odczytuje dane do parametru buffers i zwraca liczbę bajtów pomyślnie odczytanych. Można wywoływać zarówno gniazda zorientowane na połączenie, jak i bez połączenia.

To przeciążenie wymaga podania co najmniej jednego buforu odbioru. Wartość domyślna SocketFlags to None.

Jeśli używasz protokołu zorientowanego na połączenie, musisz wywołać Connect metodę w celu nawiązania połączenia hosta zdalnego lub Accept zaakceptować połączenie przychodzące przed wywołaniem metody Receive. Metoda Receive odczytuje tylko dane pochodzące z połączenia hosta zdalnego ustanowionego w metodzie Connect or Accept . Jeśli używasz protokołu bez połączenia, możesz również użyć ReceiveFrom metody . ReceiveFrom umożliwi odbieranie danych przychodzących z dowolnego hosta.

Jeśli do odczytu nie są dostępne żadne dane, Receive metoda będzie blokować dane do momentu udostępnienia danych, chyba że ustawiono wartość limitu czasu przy użyciu polecenia Socket.ReceiveTimeout. Jeśli wartość limitu czasu została przekroczona, Receive wywołanie zgłasza SocketExceptionbłąd . Jeśli jesteś w trybie nieblokowania i nie ma dostępnych danych w buforze stosu protokołu, Receive 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.

Jeśli używasz zorientowanego na Socketpołączenie , Receive metoda odczytuje tyle danych, ile jest dostępnych, aż do rozmiaru buforu. Jeśli host zdalny zamknie Socket połączenie z Shutdown metodą , a wszystkie dostępne dane zostały odebrane, Receive metoda zostanie ukończona natychmiast i zwróci zero bajtów.

Jeśli używasz bez połączenia Socket, Receive odczytuje pierwszy w kolejce datagram z adresu docelowego określonego w metodzie Connect . Jeśli otrzymany datagram jest większy niż rozmiar buffers parametru, buffers zostaje wypełniony pierwszą częścią komunikatu, nadmiar danych zostanie utracony i SocketException zostanie zgłoszony.

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

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