이 설명서는 보관되지만 유지 되지 않습니다.

Socket.BeginSend 메서드 (제네릭 IList, SocketFlags, AsyncCallback, Object)

참고: 이 메서드는 .NET Framework 버전 2.0에서 새로 추가되었습니다.

연결된 Socket에 데이터를 비동기적으로 보냅니다.

네임스페이스: System.Net.Sockets
어셈블리: System(system.dll)

public IAsyncResult BeginSend (
	IList<ArraySegment<byte>> buffers,
	SocketFlags socketFlags,
	AsyncCallback callback,
	Object state
)
public IAsyncResult BeginSend (
	IList<ArraySegment<byte>> buffers, 
	SocketFlags socketFlags, 
	AsyncCallback callback, 
	Object state
)
public function BeginSend (
	buffers : IList<ArraySegment<byte>>, 
	socketFlags : SocketFlags, 
	callback : AsyncCallback, 
	state : Object
) : IAsyncResult

매개 변수

buffers

보낼 데이터를 포함하는 Byte 형식의 배열입니다.

socketFlags

SocketFlags 값의 비트 조합입니다.

callback

AsyncCallback 대리자입니다.

state

이 요청에 대한 상태 정보가 포함된 개체입니다.

반환 값

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

예외 형식조건

ArgumentNullException

buffers가 Null 참조(Visual Basic의 경우 Nothing)인 경우

ArgumentException

buffers이 비어 있는 경우

SocketException

소켓에 액세스하려고 시도하는 동안 오류가 발생한 경우. 아래의 설명 부분을 참조하십시오.

ObjectDisposedException

Socket이 닫힌 경우

BeginSend 메서드는 Connect, BeginConnect, Accept 또는 BeginAccept 메서드에 설정된 원격 호스트에 대한 비동기 송신 작업을 시작합니다. BeginSend는 사용자가 먼저 Accept, BeginAccept, Connect 또는 BeginConnect를 호출하지 않으면 예외를 throw합니다. BeginSend 메서드를 호출하면 별도의 실행 스레드 내에서 데이터를 송신할 수 있습니다.

AsyncCallback 대리자를 구현하는 콜백 메서드를 만들어 이 메서드의 이름을 BeginSend 메서드에 전달할 수 있습니다. 이 작업을 최소한 빨리 수행하려면 state 매개 변수에 통신에 사용되는 연결되었거나 기본인 Socket이 들어 있어야 합니다. 콜백에 더 많은 정보가 필요하면 Socket 및 기타 필요한 정보를 보유하기 위한 작은 클래스나 구조체를 만들 수 있습니다. state 매개 변수를 통해 이 클래스의 인스턴스를 BeginSend 메서드에 전달합니다.

콜백 메서드에서 EndSend 메서드를 호출해야 합니다. 응용 프로그램이 BeginSend를 호출하면 시스템은 별도의 스레드를 사용하여 지정된 콜백 메서드를 실행하며, Socket이 요청된 바이트 수를 보내거나 예외를 throw할 때까지 EndSend를 차단합니다. BeginSend 메서드를 호출한 다음 원래 스레드를 차단하려면 WaitHandle.WaitOne 메서드를 사용합니다. 원래 스레드를 계속 실행하려면 콜백 메서드에서 T:System.Threading.ManualResetEvent에 대해 Set 메서드를 호출합니다. 콜백 메서드를 쓰는 방법에 대한 자세한 내용은 Callback 샘플을 참조하십시오.

BeginSend는 연결 지향 프로토콜에서 사용되지만 먼저 Connect 또는 BeginConnect 메서드를 호출하여 기본 원격 호스트를 설정한 경우에는 연결 없는 프로토콜에도 사용할 수 있습니다. 연결 없는 프로토콜을 사용하고 여러 개의 서로 다른 호스트에 데이터를 보내는 경우 BeginSendTo를 사용해야 합니다. Connect를 사용하여 기본 원격 호스트를 설정한 후에도 BeginSendTo를 사용할 수 있습니다. 또한 Connect 또는 BeginConnect를 다시 호출하여 BeginSend를 호출하기 전에 기본 원격 호스트를 변경할 수 있습니다. 연결 없는 프로토콜을 사용하는 경우에도 버퍼의 크기가 내부 서비스 공급자의 최대 패킷 크기를 초과하지 않도록 해야 합니다. 이렇게 되면 데이터그램을 보내고 BeginSendSocketException을 throw합니다.

DontRoute 플래그를 socketflags 매개 변수로 지정하면 보내고 있는 데이터가 라우팅되지 않습니다.

Note참고

SocketException이 발생하면 SocketException.ErrorCode 속성을 사용하여 특정 오류 코드를 가져옵니다. 이 코드를 가져온 다음 MSDN Library의 Windows 소켓 버전 2 API 오류 코드 설명서에서 오류에 대한 자세한 설명을 참조하십시오.

Note참고

지정한 스레드가 종료되면 해당 스레드에서 시작한 I/O가 모두 취소됩니다. 보류 중인 비동기 작업은 해당 작업이 완료되기 전에 스레드가 종료될 경우 실패할 수 있습니다.

Note참고

state는 사용자 정의 클래스를 인스턴스화한 것입니다.

Note참고

보내기가 성공적으로 완료되었다고 해서 데이터가 성공적으로 배달되었다고 볼 수는 없습니다. 전송될 데이터를 보유할 버퍼 공간이 전송 시스템에 없으면 소켓이 블로킹 모드인 경우 전송이 차단됩니다.

Note참고

응용 프로그램에 네트워크 추적을 사용하도록 설정하면 이 멤버에서 추적 정보를 출력합니다. 자세한 내용은 네트워크 추적을 참조하십시오.

Note참고

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

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

.NET Framework

2.0에서 지원
표시: