Aracılığıyla paylaş


Socket.ReceiveFrom Yöntem

Tanım

Bir veri birimi alır ve kaynak uç noktayı depolar.

Aşırı Yüklemeler

ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)

Belirtilen bayt sayısını belirtilen kullanarak veri arabelleğine SocketFlagsalır ve uç noktayı depolar.

ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)

Belirtilen bayt sayısını veri arabelleğinin SocketFlagsbelirtilen konumuna alır ve uç noktayı depolar.

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Belirtilen SocketFlagsöğesini kullanarak veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Belirtilen SocketFlagsöğesini kullanarak veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

Belirtilen SocketFlagsöğesini kullanarak veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

ReceiveFrom(Span<Byte>, EndPoint)

Veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

ReceiveFrom(Byte[], EndPoint)

Veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Belirtilen bayt sayısını belirtilen kullanarak veri arabelleğine SocketFlagsalır ve uç noktayı depolar.

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

Parametreler

buffer
Byte[]

Alınan verilerin depolama konumu olan tür Byte dizisi.

size
Int32

Alınacak bayt sayısı.

socketFlags
SocketFlags

Değerlerin bit düzeyinde birleşimi SocketFlags .

remoteEP
EndPoint

Başarılı almada güncelleştirilecek uzak konağın uç noktasıyla aynı türde bir EndPoint başvuru.

Döndürülenler

Alınan bayt sayısı.

Özel durumlar

buffer, null değeridir.

-veya-

remoteEP, null değeridir.

size 0'dan küçüktür.

-veya-

size uzunluğundan bufferbüyük.

socketFlags geçerli bir değer bileşimi değildir.

-veya-

LocalEndPoint Özelliği ayarlanmadı.

-veya-

öğesine erişilirken Socketbir işletim sistemi hatası oluşur.

Çağrı yığınındaki bir çağıranın gerekli izinleri yok.

Örnekler

Aşağıdaki kod örneği, uzak bir konaktan bağlantısız bir veri birimi alır. Arabellek boyutu ve SocketFlags yöntemine ReceiveFrom geçirilir.

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

Açıklamalar

ReceiveFrom yöntemi verileri parametresine buffer okur, başarıyla okunan bayt sayısını döndürür ve verilerin gönderildiği uzak konak uç noktasını yakalar. Bu yöntem, bilinmeyen bir konaktan veya birden çok konaktan bağlantısız veri birimleri almayı amaçlıyorsanız yararlıdır.

Bu aşırı yükleme yalnızca bir alma arabelleği, almak istediğiniz bayt sayısını, gerekli SocketFlagsve uzak konağı temsil eden bir EndPoint sağlamanızı gerektirir. Arabellek uzaklığı varsayılan olarak 0'dır.

Bağlantısız protokollerle, ReceiveFrom yerel ağ arabelleğine alınan ilk sıralanmış veri birimi okunur. Aldığınız veri birimi boyutundan bufferReceiveFrom büyükse, yöntemi iletinin mümkün olduğunca büyük bir kısmını doldurur buffer ve bir SocketExceptionoluşturur. Güvenilir olmayan bir protokol kullanıyorsanız fazla veriler kaybolur. Güvenilir bir protokol kullanıyorsanız, fazla veriler hizmet sağlayıcısı tarafından korunur ve yöntemini yeterince büyük bir arabellekle çağırarak ReceiveFrom alabilirsiniz.

Okuma için kullanılabilir veri yoksa, ReceiveFrom veri kullanılabilir olana kadar yöntemi engeller. Engelleyici olmayan moddaysanız ve protokol yığını arabelleğinde kullanılabilir veri yoksa yöntemi ReceiveFrom hemen tamamlanır ve bir SocketExceptionoluşturur. okuma için kullanılabilir veri olup olmadığını belirlemek için özelliğini kullanabilirsiniz Available . Available Sıfır olmadığında alma işlemini yeniden deneyin.

Bağlantısız protokoller için tasarlanmış olsa ReceiveFrom da, bağlantı odaklı bir protokol de kullanabilirsiniz. Bunu yapmayı seçerseniz, önce yöntemini çağırarak uzak konak bağlantısı kurmanız veya yöntemini çağırarak ConnectAccept gelen uzak konak bağlantısını kabul etmeniz gerekir. yöntemini çağırmadan ReceiveFrom önce bağlantı kurmaz veya kabul ederseniz bir SocketExceptionalırsınız. Yöntemini çağırmadan ReceiveFrom önce bağlantısız bir protokol için varsayılan uzak konak da oluşturabilirsiniz.

Bağlantı odaklı yuvalarda, ReceiveFrom parametresi tarafından size belirtilen bayt sayısına kadar kullanılabilir olan kadar veri okur. Uzak ana bilgisayar yöntemiyle Shutdown bağlantıyı kapatırsa Socket ve tüm kullanılabilir veriler alınırsa, ReceiveFrom yöntem hemen tamamlanır ve sıfır bayt döndürür.

Not

çağırmadan ReceiveFromönce yöntemini kullanarak Bind öğesini yerel bir uç noktaya açıkça bağlamanız Socket gerekir. Bunu yapmazsanız, ReceiveFrom bir SocketExceptionoluşturur. bir alırsanız, belirli bir SocketExceptionhata kodunu almak için özelliğini kullanın SocketException.ErrorCode . Bu kodu aldıktan sonra, hatanın ayrıntılı açıklaması için Windows Yuvaları sürüm 2 API hata kodu belgelerine bakın.

Not

AddressFamily içinde kullanılan öğesinin EndPoint içinde ReceiveFrom kullanılan SendToile AddressFamily eşleşmesi EndPoint gerekir.

Not

Uygulamanızda ağ izlemeyi etkinleştirdiğinizde, bu üye izleme bilgilerini çıkarır. Daha fazla bilgi için bkz. .NET Framework'da Ağ İzleme.

Ayrıca bkz.

Şunlara uygulanır

ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Belirtilen bayt sayısını veri arabelleğinin SocketFlagsbelirtilen konumuna alır ve uç noktayı depolar.

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

Parametreler

buffer
Byte[]

Alınan verilerin depolama konumu olan tür Byte dizisi.

offset
Int32

Alınan verileri depolamak için parametresindeki konum buffer .

size
Int32

Alınacak bayt sayısı.

socketFlags
SocketFlags

Değerlerin bit düzeyinde birleşimi SocketFlags .

remoteEP
EndPoint

Başarılı almada güncelleştirilecek uzak konağın uç noktasıyla aynı türde bir EndPoint başvuru.

Döndürülenler

Alınan bayt sayısı.

Özel durumlar

buffer, null değeridir.

-veya-

remoteEP, null değeridir.

offset 0'dan küçüktür.

-veya-

offset uzunluğundan bufferbüyük.

-veya-

size 0'dan küçüktür.

-veya-

size uzaklık parametresinin buffer değeri eksi değerinden büyük.

socketFlags geçerli bir değer bileşimi değildir.

-veya-

LocalEndPoint Özelliği ayarlanmadı.

-veya-

Yuvaya erişmeye çalışılırken bir hata oluştu.

Örnekler

Aşağıdaki kod örneği, uzak bir konaktan bağlantısız bir veri birimi alır. Uzaklık, arabellek boyutu ve SocketFlags yöntemine ReceiveFrom geçirilir.

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

Açıklamalar

ReceiveFrom yöntemi verileri parametresine buffer okur, başarıyla okunan bayt sayısını döndürür ve verilerin gönderildiği uzak konak uç noktasını yakalar. Bu yöntem, bilinmeyen bir konaktan veya birden çok konaktan bağlantısız veri birimleri almayı amaçlıyorsanız yararlıdır.

Bağlantısız protokollerle, ReceiveFrom yerel ağ arabelleğine alınan ilk sıralanmış veri birimi okunur. Aldığınız veri birimi boyutundan bufferReceiveFrom büyükse, yöntemi iletinin mümkün olduğunca büyük bir kısmını doldurur buffer ve bir SocketExceptionoluşturur. Güvenilir olmayan bir protokol kullanıyorsanız fazla veriler kaybolur. Güvenilir bir protokol kullanıyorsanız, fazla veriler hizmet sağlayıcısı tarafından korunur ve yöntemini yeterince büyük bir arabellekle çağırarak ReceiveFrom alabilirsiniz.

Okuma için kullanılabilir veri yoksa, ReceiveFrom veri kullanılabilir olana kadar yöntemi engeller. Engelleyici olmayan moddaysanız ve protokol yığını arabelleğinde kullanılabilir veri yoksa yöntemi ReceiveFrom hemen tamamlanır ve bir SocketExceptionoluşturur. okuma için kullanılabilir veri olup olmadığını belirlemek için özelliğini kullanabilirsiniz Available . Available Sıfır olmadığında alma işlemini yeniden deneyin.

Bağlantısız protokoller için tasarlanmış olsa ReceiveFrom da, bağlantı odaklı bir protokol de kullanabilirsiniz. Bunu yapmayı seçerseniz, önce yöntemini çağırarak uzak konak bağlantısı kurmanız veya yöntemini çağırarak ConnectAccept gelen uzak konak bağlantısını kabul etmeniz gerekir. yöntemini çağırmadan ReceiveFrom önce bağlantı kurmaz veya kabul ederseniz bir SocketExceptionalırsınız. Yöntemini çağırmadan ReceiveFrom önce bağlantısız bir protokol için varsayılan uzak konak da oluşturabilirsiniz.

Bağlantı odaklı yuvalarda, ReceiveFrom parametresi tarafından size belirtilen bayt miktarına kadar kullanılabilir olan veri miktarı kadar veri okur. Uzak ana bilgisayar yöntemiyle Shutdown bağlantıyı kapatırsa Socket ve tüm kullanılabilir veriler Alındı ise, ReceiveFrom yöntem hemen tamamlanır ve sıfır bayt döndürür.

Not

çağırmadan ReceiveFromönce yöntemini kullanarak Bind öğesini yerel bir uç noktaya açıkça bağlamanız Socket gerekir. Bunu yapmazsanız, ReceiveFrom bir SocketExceptionoluşturur. bir alırsanız, belirli bir SocketExceptionhata kodunu almak için özelliğini kullanın SocketException.ErrorCode . Bu kodu aldıktan sonra, hatanın ayrıntılı açıklaması için Windows Yuvaları sürüm 2 API hata kodu belgelerine bakın.

Not

AddressFamily içinde kullanılan öğesinin EndPoint içinde ReceiveFrom kullanılan SendToile AddressFamily eşleşmesi EndPoint gerekir.

Not

Uygulamanızda ağ izlemeyi etkinleştirdiğinizde, bu üye izleme bilgilerini çıkarır. Daha fazla bilgi için bkz. .NET Framework'da Ağ İzleme.

Ayrıca bkz.

Şunlara uygulanır

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Belirtilen SocketFlagsöğesini kullanarak veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

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

Parametreler

buffer
Span<Byte>

Alınan verilerin depolama konumu olan bayt aralığı.

socketFlags
SocketFlags

Değerlerin bit düzeyinde birleşimi SocketFlags .

remoteEP
EndPoint

Başarılı almada güncelleştirilecek uzak konağın uç noktasıyla aynı türde bir EndPoint başvuru.

Döndürülenler

Alınan bayt sayısı.

Özel durumlar

remoteEP, null değeridir.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Şunlara uygulanır

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Belirtilen SocketFlagsöğesini kullanarak veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

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

Parametreler

buffer
Byte[]

Alınan verilerin depolama konumu olan tür Byte dizisi.

socketFlags
SocketFlags

Değerlerin bit düzeyinde birleşimi SocketFlags .

remoteEP
EndPoint

Başarılı almada güncelleştirilecek uzak konağın uç noktasıyla aynı türde bir EndPoint başvuru.

Döndürülenler

Alınan bayt sayısı.

Özel durumlar

buffer, null değeridir.

-veya-

remoteEP, null değeridir.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Çağrı yığınındaki bir çağıranın gerekli izinleri yok.

Örnekler

Aşağıdaki kod örneği, uzak bir konaktan bağlantısız bir veri birimi alır. SocketFlags yöntemine ReceiveFrom geçirilir.

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

Açıklamalar

ReceiveFrom yöntemi verileri parametresine buffer okur, başarıyla okunan bayt sayısını döndürür ve verilerin gönderildiği uzak konak uç noktasını yakalar. Bu yöntem, bilinmeyen bir konaktan veya birden çok konaktan bağlantısız veri birimleri almayı amaçlıyorsanız yararlıdır.

Bu aşırı yükleme yalnızca bir alma arabelleği, gerekli SocketFlagsve uzak konağı temsil eden bir EndPoint sağlamanızı gerektirir. Uzaklık varsayılan olarak 0,boyut ise arabellek parametresinin uzunluğuna varsayılan olarak ayarlanır.

Not

çağırmadan ReceiveFromönce yöntemini kullanarak Bind öğesini yerel bir uç noktaya açıkça bağlamanız Socket gerekir. Bunu yapmazsanız, ReceiveFrom bir SocketExceptionoluşturur.

Bağlantısız protokollerle, ReceiveFrom yerel ağ arabelleğine alınan ilk sıralanmış veri birimi okunur. Aldığınız veri birimi boyutundan bufferReceiveFrom büyükse, yöntemi iletinin mümkün olduğunca büyük bir kısmını doldurur buffer ve bir SocketExceptionoluşturur. Güvenilir olmayan bir protokol kullanıyorsanız fazla veriler kaybolur. Güvenilir bir protokol kullanıyorsanız, fazla veriler hizmet sağlayıcısı tarafından korunur ve yöntemini yeterince büyük bir arabellekle çağırarak ReceiveFrom alabilirsiniz.

Okuma için kullanılabilir veri yoksa, ReceiveFrom veri kullanılabilir olana kadar yöntemi engeller. Engelleyici olmayan moddaysanız ve protokol yığını arabelleğinde kullanılabilir veri yoksa yöntemi ReceiveFrom hemen tamamlanır ve bir SocketExceptionoluşturur. okuma için kullanılabilir veri olup olmadığını belirlemek için özelliğini kullanabilirsiniz Available . Available Sıfır olmadığında alma işlemini yeniden deneyin.

Bağlantısız protokoller için tasarlanmış olsa ReceiveFrom da, bağlantı odaklı bir protokol de kullanabilirsiniz. Bunu yapmayı seçerseniz, önce yöntemini çağırarak uzak konak bağlantısı kurmanız veya yöntemini çağırarak ConnectAccept gelen uzak konak bağlantısını kabul etmeniz gerekir. yöntemini çağırmadan ReceiveFrom önce bağlantı kurmaz veya kabul ederseniz bir SocketExceptionalırsınız. Yöntemini çağırmadan ReceiveFrom önce bağlantısız bir protokol için varsayılan uzak konak da oluşturabilirsiniz.

Bağlantı odaklı yuvalarda, ReceiveFrom boyutuna bufferkadar kullanılabilir olan kadar veri okur. Uzak ana bilgisayar yöntemiyle Shutdown bağlantıyı kapatırsa Socket ve tüm kullanılabilir veriler Alındı ise, ReceiveFrom yöntem hemen tamamlanır ve sıfır bayt döndürür.

Not

bir alırsanız, belirli bir SocketExceptionhata kodunu almak için özelliğini kullanın SocketException.ErrorCode . Bu kodu aldıktan sonra, hatanın ayrıntılı açıklaması için Windows Yuvaları sürüm 2 API hata kodu belgelerine bakın.

Not

AddressFamily içinde kullanılan öğesinin EndPoint içinde ReceiveFrom kullanılan SendToile AddressFamily eşleşmesi EndPoint gerekir.

Not

Uygulamanızda ağ izlemeyi etkinleştirdiğinizde, bu üye izleme bilgilerini çıkarır. Daha fazla bilgi için bkz. .NET Framework'da Ağ İzleme.

Ayrıca bkz.

Şunlara uygulanır

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

Kaynak:
Socket.cs
Kaynak:
Socket.cs

Belirtilen SocketFlagsöğesini kullanarak veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

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

Parametreler

buffer
Span<Byte>

Alınan verilerin depolama konumu olan bayt aralığı.

socketFlags
SocketFlags

Değerlerin bit düzeyinde birleşimi SocketFlags .

receivedAddress
SocketAddress

SocketAddress Bu yöntem döndürdüğünde uzak eş değeriyle güncelleştirilen bir örnek.

Döndürülenler

Alınan bayt sayısı.

Özel durumlar

receivedAddress, null değeridir.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Şunlara uygulanır

ReceiveFrom(Span<Byte>, EndPoint)

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

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

Parametreler

buffer
Span<Byte>

Alınan verilerin depolama konumu olan bayt aralığı.

remoteEP
EndPoint

Başarılı almada güncelleştirilecek uzak konağın uç noktasıyla aynı türde bir EndPoint başvuru.

Döndürülenler

Alınan bayt sayısı.

Özel durumlar

remoteEP, null değeridir.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Şunlara uygulanır

ReceiveFrom(Byte[], EndPoint)

Kaynak:
Socket.cs
Kaynak:
Socket.cs
Kaynak:
Socket.cs

Veri arabelleğine bir veri birimi alır ve uç noktayı depolar.

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

Parametreler

buffer
Byte[]

Alınan verilerin depolama konumu olan tür Byte dizisi.

remoteEP
EndPoint

Başarılı almada güncelleştirilecek uzak konağın uç noktasıyla aynı türde bir EndPoint başvuru.

Döndürülenler

Alınan bayt sayısı.

Özel durumlar

buffer, null değeridir.

-veya-

remoteEP, null değeridir.

Yuvaya erişmeye çalışılırken bir hata oluştu.

Çağrı yığınındaki bir çağıranın gerekli izinleri yok.

Örnekler

Aşağıdaki kod örneği, uzak bir konaktan bağlantısız bir veri birimi alır.

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

Açıklamalar

ReceiveFrom yöntemi verileri parametresine buffer okur, başarıyla okunan bayt sayısını döndürür ve verilerin gönderildiği uzak konak uç noktasını yakalar. Bu yöntem, bilinmeyen bir konaktan veya birden çok konaktan bağlantısız veri birimleri almayı amaçlıyorsanız yararlıdır.

Bu aşırı yükleme yalnızca uzak konağı temsil eden bir alma bufferve EndPoint sağlamanızı gerektirir. Arabellek uzaklığı varsayılan olarak 0'dır. Boyut varsayılan olarak parametresinin uzunluğuna buffer , değer ise socketFlags varsayılan olarak değerine ayarlanır None.

Not

çağırmadan ReceiveFromönce yöntemini kullanarak Bind öğesini yerel bir uç noktaya açıkça bağlamanız Socket gerekir. Bunu yapmazsanız, ReceiveFrom bir SocketExceptionoluşturur.

Bağlantısız protokollerle, ReceiveFrom yerel ağ arabelleğine alınan ilk sıralanmış veri birimi okunur. Aldığınız veri birimi boyutundan bufferReceiveFrom büyükse, yöntemi iletinin mümkün olduğunca büyük bir kısmını doldurur buffer ve bir SocketExceptionoluşturur. Güvenilir olmayan bir protokol kullanıyorsanız fazla veriler kaybolur. Güvenilir bir protokol kullanıyorsanız, fazla veriler hizmet sağlayıcısı tarafından korunur ve yeterince büyük bir arabellekle yöntemini çağırarak ReceiveFrom bunu alabilirsiniz.

Okuma için kullanılabilir veri yoksa, ReceiveFrom veri kullanılabilir olana kadar yöntemi engeller. Engelleyici olmayan moddaysanız ve protokol yığını arabelleğinde kullanılabilir veri yoksa yöntemi ReceiveFrom hemen tamamlanır ve bir SocketExceptionoluşturur. Okuma için kullanılabilir veri olup olmadığını belirlemek için özelliğini kullanabilirsiniz Available . Sıfır olmayan bir değer olduğunda Available alma işlemini yeniden deneyin.

Bağlantısız protokoller için tasarlanmış olsa ReceiveFrom da, bağlantı odaklı bir protokol de kullanabilirsiniz. Bunu yapmayı seçerseniz, önce yöntemini çağırarak bir uzak konak bağlantısı kurmanız veya yöntemini çağırarak ConnectAccept gelen uzak konak bağlantısını kabul etmelisiniz. yöntemini çağırmadan ReceiveFrom önce bir bağlantı kurmaz veya kabul ederseniz, bir SocketExceptionalırsınız. Yöntemini çağırmadan ReceiveFrom önce bağlantısız bir protokol için varsayılan uzak konak da oluşturabilirsiniz.

Bağlantı odaklı yuvalarda, ReceiveFrom boyutuna bufferkadar kullanılabilir olan kadar veri okur. Uzak ana bilgisayar yöntemiyle Shutdown bağlantıyı kapatırsa Socket ve tüm kullanılabilir veriler alınmışsa, ReceiveFrom yöntem hemen tamamlanır ve sıfır bayt döndürür.

Not

bir alırsanız, belirli bir SocketExceptionhata kodunu almak için özelliğini kullanın SocketException.ErrorCode . Bu kodu aldıktan sonra, hatanın ayrıntılı açıklaması için Windows Yuvaları sürüm 2 API hata kodu belgelerine bakın.

Not

AddressFamily içinde ReceiveFrom kullanılan öğesinin EndPoint içinde kullanılan SendToile EndPoint eşleşmesi AddressFamily gerekir.

Not

Uygulamanızda ağ izlemeyi etkinleştirdiğinizde, bu üye izleme bilgilerini çıkarır. Daha fazla bilgi için bkz. .NET Framework'da Ağ İzleme.

Ayrıca bkz.

Şunlara uygulanır