다음을 통해 공유


Socket.BeginReceiveFrom 메서드

정의

지정된 네트워크 디바이스에서 비동기적으로 데이터를 받기 시작합니다.

public:
 IAsyncResult ^ BeginReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult

매개 변수

buffer
Byte[]

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

offset
Int32

데이터를 저장하기 위한 buffer 매개 변수의 위치(0부터 시작)입니다.

size
Int32

수신 바이트 수입니다.

socketFlags
SocketFlags

SocketFlags 값의 비트 조합입니다.

remoteEP
EndPoint

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

callback
AsyncCallback

AsyncCallback 대리자입니다.

state
Object

이 요청에 대한 상태 정보를 포함하는 개체입니다.

반환

비동기 읽기를 참조하는 IAsyncResult입니다.

예외

buffernull입니다.

또는

remoteEPnull입니다.

.NET Framework 및 .NET 5 이하만 해당: 소켓에 액세스하려고 할 때 오류가 발생했습니다.

offset 가 0보다 작습니다.

또는

offsetbuffer의 길이보다 큽니다.

또는

size 가 0보다 작습니다.

또는

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

Socket이 닫혔습니다.

호출 스택의 상위 호출자에게 요청된 작업을 수행할 권한이 없는 경우

설명

중요

호환성 API입니다. 새 개발을 위해 APM (Begin*End*) 메서드를 사용하지 않는 것이 좋습니다. 대신 에 기반한 Task등가를 사용합니다.

를 구현하는 콜백을 AsyncCallbackBeginReceiveFrom 전달하여 작업 완료에 대한 알림을 받을 수 있습니다. 기본 네트워크 스택이 동기적으로 작업을 완료하는 경우 콜백은 를 호출 BeginReceiveFrom하는 동안 인라인으로 실행됩니다. 이 경우 반환 IAsyncResult 된 의 CompletedSynchronously 속성이 로 설정 true 되어 메서드가 동기적으로 완료되었음을 나타냅니다. 사용 하 여는 의 AsyncStateIAsyncResult 속성을 메서드에 전달 된 상태 개체를 BeginReceiveFrom 가져옵니다.

메서드를 호출 EndReceiveFrom 하여 비동 BeginReceiveFrom 기 작업을 완료해야 합니다. 일반적으로 메서드는 대리자에서 호출됩니다 AsyncCallback . EndReceiveFrom 는 작업이 완료될 때까지 호출 스레드를 차단합니다.

이 메서드는 매개 변수로 buffer 데이터를 읽고 데이터가 전송되는 원격 호스트 엔드포인트를 캡처합니다. 이 엔드포인트를 검색하는 방법에 대한 자세한 내용은 을 참조하세요 EndReceiveFrom. 이 메서드는 알 수 없는 호스트 또는 여러 호스트에서 연결 없는 데이터그램을 비동기적으로 수신하려는 경우에 가장 유용합니다. 이러한 경우 는 BeginReceiveFrom 로컬 네트워크 버퍼에 수신된 첫 번째 큐에 넣은 데이터그램을 읽습니다. 받는 데이터그램이 의 크기 bufferBeginReceiveFrom 보다 크면 메서드는 가능한 한 많은 메시지로 채워 buffer 지고 을 throw합니다SocketException. 신뢰할 수 없는 프로토콜을 사용하는 경우 초과 데이터가 손실됩니다. 신뢰할 수 있는 프로토콜을 사용하는 경우 초과 데이터는 서비스 공급자에 의해 보존되며 충분한 버퍼가 있는 메서드를 BeginReceiveFrom 호출하여 검색할 수 있습니다.

항상 반환 되는 원격 호스트 엔드포인트에는 애플리케이션을 명시적으로 바인딩해야 하는 데는 Socket 사용 하 여 로컬 엔드포인트을 Bind 메서드 및 호출 합니다 SetSocketOption 메서드를 optionLevel 매개변수설정IP또는 IPv6 적절 하 게 합니다 optionName 매개 변수 설정 PacketInformation, 및 optionValue 호출 하기 전에이 옵션을 사용 하도록 설정 하려면 매개 변수는 BeginReceiveFrom 메서드. 그렇지 않으면 수신기가 메서드를 호출 BeginReceiveFrom 하기 전에 발신자가 여러 데이터그램을 보낸 경우 원격 호스트 엔드포인트가 반환되지 않을 수 있습니다.

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

remoteEp 매개 변수

연결 지향 소켓을 BeginReceiveFrom 사용하면 는 매개 변수에 지정된 size 바이트 수까지 사용할 수 있는 만큼의 데이터를 읽습니다.

보류 중인 BeginReceiveFrom를 취소하려면 메서드를 호출합니다 Close .

참고

을 수신하는 SocketException경우 속성을 사용하여 SocketException.ErrorCode 특정 오류 코드를 가져옵니다.

참고

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

참고

실행 컨텍스트(보안 컨텍스트, 가장된 사용자 및 호출 컨텍스트)는 비동 Socket 기 메서드에 대해 캐시됩니다. 특정 컨텍스트(특정 비동 Socket 기 메서드, 특정 instance 및 특정 Socket 콜백)를 처음 사용한 후 해당 컨텍스트를 나중에 사용하면 성능이 향상됩니다.

적용 대상

추가 정보