Socket.ReceiveFrom 메서드

정의

데이터그램을 받고 소스 엔드포인트를 저장합니다.

오버로드

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

지정된 SocketFlags를 사용하여 데이터 버퍼에 원하는 바이트 수를 받고 엔드포인트를 저장합니다.

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

지정된 SocketFlags를 사용하여 데이터 버퍼의 지정된 위치에 지정된 바이트 수의 데이터를 수신하고 엔드포인트를 저장합니다.

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

지정된 SocketFlags를 사용하여 데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

ReceiveFrom(Byte[], SocketFlags, EndPoint)

지정된 SocketFlags를 사용하여 데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

지정된 SocketFlags를 사용하여 데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

ReceiveFrom(Span<Byte>, EndPoint)

데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

ReceiveFrom(Byte[], EndPoint)

데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

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

지정된 SocketFlags를 사용하여 데이터 버퍼에 원하는 바이트 수를 받고 엔드포인트를 저장합니다.

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

매개 변수

buffer
Byte[]

수신된 데이터의 스토리지 위치에 해당하는 형식 Byte의 배열입니다.

size
Int32

수신 바이트 수입니다.

socketFlags
SocketFlags

SocketFlags 값의 비트 조합입니다.

remoteEP
EndPoint

성공적인 수신 시 업데이트할 원격 호스트의 엔드포인트와 동일한 형식의 에 대한 참조 EndPoint 입니다.

반환

받은 바이트 수입니다.

예외

buffer이(가) null인 경우

또는

remoteEP이(가) null인 경우

size 가 0보다 작습니다.

또는

sizebuffer의 길이보다 큽니다.

socketFlags가 값의 유효한 조합이 아닌 경우

또는

LocalEndPoint 속성이 설정되지 않은 경우

또는

Socket에 액세스하는 동안 운영 체제 오류가 발생한 경우

Socket이 닫혔습니다.

호출 스택에 있는 호출자에게 필요한 권한이 없는 경우

예제

다음 코드 예제에서는 원격 호스트에서 연결 없는 데이터그램을 받습니다. 및 버퍼 크기 SocketFlags 는 메서드에 ReceiveFrom 전달됩니다.

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

설명

메서드는 ReceiveFrom 매개 변수로 buffer 데이터를 읽고, 성공적으로 읽은 바이트 수를 반환하고, 데이터가 전송된 원격 호스트 엔드포인트를 캡처합니다. 이 메서드는 알 수 없는 호스트 또는 여러 호스트에서 연결 없는 데이터그램을 수신하려는 경우에 유용합니다.

이 오버로드는 수신 버퍼, 수신하려는 바이트 수, 필요한 SocketFlags및 원격 호스트를 나타내는 만 EndPoint 제공해야 합니다. 버퍼 오프셋의 기본값은 0입니다.

연결 없는 프로토콜을 사용하면 는 ReceiveFrom 로컬 네트워크 버퍼에 수신된 첫 번째 큐에 넣은 데이터그램을 읽습니다. 받는 데이터그램이 의 크기 bufferReceiveFrom 보다 크면 메서드는 가능한 한 많은 메시지로 채워 buffer 지고 을 throw합니다SocketException. 신뢰할 수 없는 프로토콜을 사용하는 경우 초과 데이터가 손실됩니다. 신뢰할 수 있는 프로토콜을 사용하는 경우 초과 데이터는 서비스 공급자에 의해 보존되며 충분한 버퍼가 있는 메서드를 ReceiveFrom 호출하여 검색할 수 있습니다.

읽을 ReceiveFrom 수 있는 데이터가 없으면 데이터를 사용할 수 있을 때까지 메서드가 차단됩니다. 비차단 모드에 있고 프로토콜 스택 버퍼에서 사용할 수 있는 데이터가 없는 경우 메서드는 ReceiveFrom 즉시 완료되고 을 throw합니다 SocketException. 사용할 수 있습니다는 Available 데이터를 읽을 수 있는지 여부를 확인 하는 속성입니다. 가 0이 아닌 경우 Available 수신 작업을 다시 시도합니다.

ReceiveFrom 는 연결 없는 프로토콜을 위한 것이지만 연결 지향 프로토콜도 사용할 수 있습니다. 이렇게 하려면 먼저 메서드를 호출하여 원격 호스트 연결을 설정하거나 메서드를 호출 ConnectAccept 하여 들어오는 원격 호스트 연결을 수락해야 합니다. 메서드SocketException를 호출 ReceiveFrom 하기 전에 연결을 설정하거나 수락하지 않으면 가 표시됩니다. 메서드를 호출 ReceiveFrom 하기 전에 연결 없는 프로토콜에 대한 기본 원격 호스트를 설정할 수도 있습니다.

연결 지향 소켓을 ReceiveFrom 사용하면 는 매개 변수에 지정된 size 바이트 수까지 사용할 수 있는 만큼의 데이터를 읽습니다. 원격 호스트가 메서드와의 Shutdown 연결을 종료 Socket 하고 사용 가능한 모든 데이터를 받은 ReceiveFrom 경우 메서드는 즉시 완료되고 0바이트를 반환합니다.

참고

를 호출 ReceiveFrom하기 전에 메서드를 Socket 사용하여 Bind 를 로컬 엔드포인트에 명시적으로 바인딩해야 합니다. 그렇지 않으면 는 ReceiveFrom 을 throw합니다 SocketException. 을 수신하는 SocketException경우 속성을 사용하여 SocketException.ErrorCode 특정 오류 코드를 가져옵니다. 이 코드를 가져온 후 오류에 대한 자세한 설명은 Windows 소켓 버전 2 API 오류 코드 설명서를 참조하세요.

참고

에 사용되는 의 는 AddressFamilyEndPointReceiveFrom 사용된 SendToEndPointAddressFamily 일치해야 합니다.

참고

애플리케이션에 네트워크 추적을 사용하도록 설정하면 이 멤버에서 추적 정보를 출력합니다. 자세한 내용은 .NET Framework 네트워크 추적을 참조하세요.

추가 정보

적용 대상

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

지정된 SocketFlags를 사용하여 데이터 버퍼의 지정된 위치에 지정된 바이트 수의 데이터를 수신하고 엔드포인트를 저장합니다.

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

매개 변수

buffer
Byte[]

수신된 데이터의 스토리지 위치에 해당하는 형식 Byte의 배열입니다.

offset
Int32

수신된 데이터를 저장할 buffer 매개 변수의 위치입니다.

size
Int32

수신 바이트 수입니다.

socketFlags
SocketFlags

SocketFlags 값의 비트 조합입니다.

remoteEP
EndPoint

성공적인 수신 시 업데이트할 원격 호스트의 엔드포인트와 동일한 형식의 에 대한 참조 EndPoint 입니다.

반환

받은 바이트 수입니다.

예외

buffer이(가) null인 경우

또는

remoteEP이(가) null인 경우

offset 가 0보다 작습니다.

또는

offsetbuffer의 길이보다 큽니다.

또는

size 가 0보다 작습니다.

또는

sizebuffer의 길이에서 오프셋 매개 변수 값을 뺀 크기보다 큰 경우

socketFlags가 값의 유효한 조합이 아닙니다.

또는

LocalEndPoint 속성이 설정되지 않은 경우

또는

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

예제

다음 코드 예제에서는 원격 호스트에서 연결 없는 데이터그램을 받습니다. 오프셋, 버퍼 크기 및 SocketFlags 는 메서드에 ReceiveFrom 전달됩니다.

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

설명

메서드는 ReceiveFrom 매개 변수로 buffer 데이터를 읽고, 성공적으로 읽은 바이트 수를 반환하고, 데이터가 전송된 원격 호스트 엔드포인트를 캡처합니다. 이 메서드는 알 수 없는 호스트 또는 여러 호스트에서 연결 없는 데이터그램을 수신하려는 경우에 유용합니다.

연결 없는 프로토콜을 사용하면 는 ReceiveFrom 로컬 네트워크 버퍼에 수신된 첫 번째 큐에 넣은 데이터그램을 읽습니다. 받는 데이터그램이 의 크기 bufferReceiveFrom 보다 크면 메서드는 가능한 한 많은 메시지로 채워 buffer 지고 을 throw합니다SocketException. 신뢰할 수 없는 프로토콜을 사용하는 경우 초과 데이터가 손실됩니다. 신뢰할 수 있는 프로토콜을 사용하는 경우 초과 데이터는 서비스 공급자에 의해 보존되며 충분한 버퍼가 있는 메서드를 ReceiveFrom 호출하여 검색할 수 있습니다.

읽을 ReceiveFrom 수 있는 데이터가 없으면 데이터를 사용할 수 있을 때까지 메서드가 차단됩니다. 비차단 모드에 있고 프로토콜 스택 버퍼에서 사용할 수 있는 데이터가 없는 경우 메서드는 ReceiveFrom 즉시 완료되고 을 throw합니다 SocketException. 사용할 수 있습니다는 Available 데이터를 읽을 수 있는지 여부를 확인 하는 속성입니다. 가 0이 아닌 경우 Available 수신 작업을 다시 시도합니다.

ReceiveFrom 는 연결 없는 프로토콜을 위한 것이지만 연결 지향 프로토콜도 사용할 수 있습니다. 이렇게 하려면 먼저 메서드를 호출하여 원격 호스트 연결을 설정하거나 메서드를 호출 ConnectAccept 하여 들어오는 원격 호스트 연결을 수락해야 합니다. 메서드SocketException를 호출 ReceiveFrom 하기 전에 연결을 설정하거나 수락하지 않으면 가 표시됩니다. 메서드를 호출 ReceiveFrom 하기 전에 연결 없는 프로토콜에 대한 기본 원격 호스트를 설정할 수도 있습니다.

연결 지향 소켓을 ReceiveFrom 사용하면 에서 매개 변수에 지정된 size 바이트 양까지 사용할 수 있는 만큼의 데이터를 읽습니다. 원격 호스트가 메서드와의 Shutdown 연결을 종료 Socket 하고 사용 가능한 모든 데이터가 수신된 ReceiveFrom 경우 메서드는 즉시 완료되고 0바이트를 반환합니다.

참고

를 호출 ReceiveFrom하기 전에 메서드를 Socket 사용하여 Bind 를 로컬 엔드포인트에 명시적으로 바인딩해야 합니다. 그렇지 않으면 는 ReceiveFrom 을 throw합니다 SocketException. 을 수신하는 SocketException경우 속성을 사용하여 SocketException.ErrorCode 특정 오류 코드를 가져옵니다. 이 코드를 가져온 후 오류에 대한 자세한 설명은 Windows 소켓 버전 2 API 오류 코드 설명서를 참조하세요.

참고

에 사용되는 의 는 AddressFamilyEndPointReceiveFrom 사용된 SendToEndPointAddressFamily 일치해야 합니다.

참고

애플리케이션에 네트워크 추적을 사용하도록 설정하면 이 멤버에서 추적 정보를 출력합니다. 자세한 내용은 .NET Framework 네트워크 추적을 참조하세요.

추가 정보

적용 대상

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

지정된 SocketFlags를 사용하여 데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

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

매개 변수

buffer
Span<Byte>

수신된 데이터의 스토리지 위치인 바이트 범위입니다.

socketFlags
SocketFlags

SocketFlags 값의 비트 조합입니다.

remoteEP
EndPoint

성공적인 수신 시 업데이트할 원격 호스트의 엔드포인트와 동일한 형식의 에 대한 참조 EndPoint 입니다.

반환

받은 바이트 수입니다.

예외

remoteEP이(가) null인 경우

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

적용 대상

ReceiveFrom(Byte[], SocketFlags, EndPoint)

지정된 SocketFlags를 사용하여 데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

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

매개 변수

buffer
Byte[]

수신된 데이터에 대한 스토리지 위치인 Byte 형식의 배열입니다.

socketFlags
SocketFlags

SocketFlags 값의 비트 조합입니다.

remoteEP
EndPoint

성공적인 수신 시 업데이트할 원격 호스트의 엔드포인트와 동일한 형식의 에 대한 참조 EndPoint 입니다.

반환

받은 바이트 수입니다.

예외

buffer이(가) null인 경우

또는

remoteEP이(가) null인 경우

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

호출 스택에 있는 호출자에게 필요한 권한이 없는 경우

예제

다음 코드 예제에서는 원격 호스트에서 연결 없는 데이터그램을 받습니다. SocketFlags 는 메서드에 ReceiveFrom 전달됩니다.

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

설명

메서드는 ReceiveFrom 매개 변수로 buffer 데이터를 읽고, 성공적으로 읽은 바이트 수를 반환하고, 데이터가 전송된 원격 호스트 엔드포인트를 캡처합니다. 이 메서드는 알 수 없는 호스트 또는 여러 호스트에서 연결 없는 데이터그램을 수신하려는 경우에 유용합니다.

이 오버로드는 수신 버퍼, 필요한 SocketFlags및 원격 호스트를 나타내는 만 EndPoint 제공해야 합니다. 오프셋의 기본값은 0이고 크기는 버퍼 매개 변수의 길이로 기본 설정됩니다.

참고

를 호출 ReceiveFrom하기 전에 메서드를 Socket 사용하여 Bind 를 로컬 엔드포인트에 명시적으로 바인딩해야 합니다. 그렇지 않으면 는 ReceiveFrom 을 throw합니다 SocketException.

연결 없는 프로토콜을 사용하면 는 ReceiveFrom 로컬 네트워크 버퍼에 수신된 첫 번째 큐에 넣은 데이터그램을 읽습니다. 받는 데이터그램이 의 크기 bufferReceiveFrom 보다 크면 메서드는 가능한 한 많은 메시지로 채워 buffer 지고 을 throw합니다SocketException. 신뢰할 수 없는 프로토콜을 사용하는 경우 초과 데이터가 손실됩니다. 신뢰할 수 있는 프로토콜을 사용하는 경우 초과 데이터는 서비스 공급자에 의해 보존되며 충분한 버퍼가 있는 메서드를 ReceiveFrom 호출하여 검색할 수 있습니다.

읽을 ReceiveFrom 수 있는 데이터가 없으면 데이터를 사용할 수 있을 때까지 메서드가 차단됩니다. 비차단 모드에 있고 프로토콜 스택 버퍼에서 사용할 수 있는 데이터가 없는 경우 메서드는 ReceiveFrom 즉시 완료되고 을 throw합니다 SocketException. 사용할 수 있습니다는 Available 데이터를 읽을 수 있는지 여부를 확인 하는 속성입니다. 가 0이 아닌 경우 Available 수신 작업을 다시 시도합니다.

ReceiveFrom 는 연결 없는 프로토콜을 위한 것이지만 연결 지향 프로토콜도 사용할 수 있습니다. 이렇게 하려면 먼저 메서드를 호출하여 원격 호스트 연결을 설정하거나 메서드를 호출 ConnectAccept 하여 들어오는 원격 호스트 연결을 수락해야 합니다. 메서드SocketException를 호출 ReceiveFrom 하기 전에 연결을 설정하거나 수락하지 않으면 가 표시됩니다. 메서드를 호출 ReceiveFrom 하기 전에 연결 없는 프로토콜에 대한 기본 원격 호스트를 설정할 수도 있습니다.

연결 지향 소켓을 사용하면 ReceiveFrom 의 크기까지 사용할 수 있는 만큼의 buffer데이터를 읽습니다. 원격 호스트가 메서드와의 Shutdown 연결을 종료 Socket 하고 사용 가능한 모든 데이터가 수신된 ReceiveFrom 경우 메서드는 즉시 완료되고 0바이트를 반환합니다.

참고

을 수신하는 SocketException경우 속성을 사용하여 SocketException.ErrorCode 특정 오류 코드를 가져옵니다. 이 코드를 가져온 후 오류에 대한 자세한 설명은 Windows 소켓 버전 2 API 오류 코드 설명서를 참조하세요.

참고

에 사용되는 의 는 AddressFamilyEndPointReceiveFrom 사용된 SendToEndPointAddressFamily 일치해야 합니다.

참고

애플리케이션에 네트워크 추적을 사용하도록 설정하면 이 멤버에서 추적 정보를 출력합니다. 자세한 내용은 .NET Framework 네트워크 추적을 참조하세요.

추가 정보

적용 대상

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

지정된 SocketFlags를 사용하여 데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

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

매개 변수

buffer
Span<Byte>

수신된 데이터의 스토리지 위치인 바이트 범위입니다.

socketFlags
SocketFlags

SocketFlags 값의 비트 조합입니다.

receivedAddress
SocketAddress

SocketAddress 이 메서드가 반환되면 원격 피어의 값으로 업데이트되는 instance.

반환

받은 바이트 수입니다.

예외

receivedAddress이(가) null인 경우

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

적용 대상

ReceiveFrom(Span<Byte>, EndPoint)

데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

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

매개 변수

buffer
Span<Byte>

수신된 데이터의 스토리지 위치인 바이트 범위입니다.

remoteEP
EndPoint

성공적인 수신 시 업데이트할 원격 호스트의 엔드포인트와 동일한 형식의 에 대한 참조 EndPoint 입니다.

반환

받은 바이트 수입니다.

예외

remoteEP이(가) null인 경우

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

적용 대상

ReceiveFrom(Byte[], EndPoint)

데이터 버퍼에 데이터그램을 받고 엔드포인트를 저장합니다.

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

매개 변수

buffer
Byte[]

수신된 데이터의 스토리지 위치에 해당하는 형식 Byte의 배열입니다.

remoteEP
EndPoint

성공적인 수신 시 업데이트할 원격 호스트의 엔드포인트와 동일한 형식의 에 대한 참조 EndPoint 입니다.

반환

받은 바이트 수입니다.

예외

buffer이(가) null인 경우

또는

remoteEP이(가) null인 경우

소켓에 액세스하는 동안 오류가 발생했습니다.

Socket이 닫혔습니다.

호출 스택에 있는 호출자에게 필요한 권한이 없는 경우

예제

다음 코드 예제에서는 원격 호스트에서 연결 없는 데이터그램을 받습니다.

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

설명

메서드는 ReceiveFrom 매개 변수로 buffer 데이터를 읽고, 성공적으로 읽은 바이트 수를 반환하고, 데이터가 전송된 원격 호스트 엔드포인트를 캡처합니다. 이 메서드는 알 수 없는 호스트 또는 여러 호스트에서 연결 없는 데이터그램을 수신하려는 경우에 유용합니다.

이 오버로드는 원격 호스트를 나타내는 수신 bufferEndPoint 만 제공해야 합니다. 버퍼 오프셋의 기본값은 0입니다. 크기는 매개 변수의 buffer 길이로 기본 설정되고 값은 socketFlags 기본적으로 입니다 None.

참고

를 호출 ReceiveFrom하기 전에 메서드를 Socket 사용하여 Bind 를 로컬 엔드포인트에 명시적으로 바인딩해야 합니다. 그렇지 않으면 는 ReceiveFrom 을 throw합니다 SocketException.

연결 없는 프로토콜을 사용하면 는 ReceiveFrom 로컬 네트워크 버퍼에 수신된 첫 번째 큐에 넣은 데이터그램을 읽습니다. 받는 데이터그램이 의 크기 bufferReceiveFrom 보다 크면 메서드는 가능한 한 많은 메시지로 채워 buffer 지고 을 throw합니다SocketException. 신뢰할 수 없는 프로토콜을 사용하는 경우 초과 데이터가 손실됩니다. 신뢰할 수 있는 프로토콜을 사용하는 경우 초과 데이터는 서비스 공급자에 의해 보존되며 충분한 버퍼가 있는 메서드를 ReceiveFrom 호출하여 검색할 수 있습니다.

읽을 ReceiveFrom 수 있는 데이터가 없으면 데이터를 사용할 수 있을 때까지 메서드가 차단됩니다. 비차단 모드에 있고 프로토콜 스택 버퍼에서 사용할 수 있는 데이터가 없는 경우 메서드는 ReceiveFrom 즉시 완료되고 을 throw합니다 SocketException. 사용할 수 있습니다는 Available 데이터를 읽을 수 있는지 여부를 확인 하는 속성입니다. 가 0이 아닌 경우 Available 수신 작업을 다시 시도합니다.

ReceiveFrom 는 연결 없는 프로토콜을 위한 것이지만 연결 지향 프로토콜도 사용할 수 있습니다. 이렇게 하려면 먼저 메서드를 호출하여 원격 호스트 연결을 설정하거나 메서드를 호출 ConnectAccept 하여 들어오는 원격 호스트 연결을 수락해야 합니다. 메서드SocketException를 호출 ReceiveFrom 하기 전에 연결을 설정하거나 수락하지 않으면 가 표시됩니다. 메서드를 호출 ReceiveFrom 하기 전에 연결 없는 프로토콜에 대한 기본 원격 호스트를 설정할 수도 있습니다.

연결 지향 소켓을 사용하면 ReceiveFrom 의 크기까지 사용할 수 있는 만큼의 buffer데이터를 읽습니다. 원격 호스트가 메서드와의 Shutdown 연결을 종료 Socket 하고 사용 가능한 모든 데이터를 받은 ReceiveFrom 경우 메서드는 즉시 완료되고 0바이트를 반환합니다.

참고

을 수신하는 SocketException경우 속성을 사용하여 SocketException.ErrorCode 특정 오류 코드를 가져옵니다. 이 코드를 가져온 후 오류에 대한 자세한 설명은 Windows 소켓 버전 2 API 오류 코드 설명서를 참조하세요.

참고

에 사용되는 의 는 AddressFamilyEndPointReceiveFrom 사용된 SendToEndPointAddressFamily 일치해야 합니다.

참고

애플리케이션에 네트워크 추적을 사용하도록 설정하면 이 멤버에서 추적 정보를 출력합니다. 자세한 내용은 .NET Framework 네트워크 추적을 참조하세요.

추가 정보

적용 대상