이 페이지가 유용했습니까?
이 콘텐츠에 대한 여러분의 의견은 중요합니다. 의견을 알려주십시오.
추가 의견
1500자 남음
내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

Socket.Send 메서드 (Byte[], Int32, Int32, SocketFlags, SocketError)

지정된 SocketFlags를 사용하여 지정된 오프셋부터 원하는 바이트 수의 데이터를 연결된 Socket에 보냅니다.

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

public int Send(
	byte[] buffer,
	int offset,
	int size,
	SocketFlags socketFlags,
	out SocketError errorCode
)

매개 변수

buffer
형식: System.Byte[]
보낼 데이터를 포함하는 Byte 형식의 배열입니다.
offset
형식: System.Int32
데이터 보내기를 시작할 데이터 버퍼 내의 위치입니다.
size
형식: System.Int32
보낼 바이트 수입니다.
socketFlags
형식: System.Net.Sockets.SocketFlags
SocketFlags 값의 비트 조합입니다.
errorCode
형식: System.Net.Sockets.SocketError
소켓 오류를 저장하는 SocketError 개체입니다.

반환 값

형식: System.Int32
Socket 에 보낸 바이트 수입니다.

예외조건
ArgumentNullException

buffernull입니다.

ArgumentOutOfRangeException

offset이 0보다 작은 경우

또는

offsetbuffer의 길이보다 큰 경우

또는

size가 0보다 작은 경우

또는

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

SocketException

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

또는

Socket 에 액세스하는 동안 운영 체제 오류가 발생한 경우. 자세한 내용은 설명 부분을 참조하십시오.

ObjectDisposedException

Socket 이 닫힌 경우

Send Connect 또는 Accept 메서드에 지정된 원격 호스트로 동기적으로 데이터를 보내고 성공적으로 보낸 바이트 수를 반환합니다. Send 는 연결 지향 프로토콜과 연결 없는 프로토콜 모두에서 사용할 수 있습니다.

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

연결 없는 프로토콜을 사용하는 경우 이 메서드를 호출하기 전에 Connect를 호출해야 합니다. Send를 사용하면 SocketException이 throw됩니다. 연결 지향 프로토콜을 사용하는 경우, Connect를 사용하여 원격 호스트 연결을 설정하거나 Accept를 사용하여 들어오는 연결을 받아들여야 합니다.

연결 없는 프로토콜을 사용하고 여러 개의 서로 다른 호스트에 데이터를 보내는 경우 SendTo를 사용해야 합니다. SendTo 를 사용하지 않는 경우 Send를 호출하기 전에 항상 Connect를 호출해야 합니다. Connect 를 사용하여 기본 원격 호스트를 설정한 후에도 SendTo를 사용할 수 있습니다. 또한 Connect에 대한 다른 호출을 작성하여 Send를 호출하기 전에 기본 원격 호스트를 변경할 수 있습니다.

또한 해당 크기가 내부 서비스 공급자의 최대 패킷 크기를 초과하지 않도록 해야 합니다. 이렇게 되면 데이터그램을 보내고 SendSocketException을 throw합니다.

연결 지향 프로토콜을 사용하는 경우 Socket.SendTimeout을 사용하여 제한 시간을 설정하지 않으면 요청한 바이트 수를 보낼 때까지 Send가 차단됩니다. 시간 제한 값이 초과되면 Send 호출이 SocketException을 throw합니다. 비블로킹 모드에서 Send는 요청한 바이트 수보다 적은 데이터를 보내는 경우에도 성공적으로 완료될 수 있습니다. 응용 프로그램이 요청된 바이트 수를 보낼 때까지 해당 응용 프로그램에서는 보내는 바이트 수를 추적하고 작업을 다시 시도해야 합니다. 또한 보낸 데이터가 네트워크에 즉시 나타나지 않을 수도 있습니다. 네트워크 효율성을 향상시키려면 상당한 양의 나가는 데이터가 모일 때까지 내부 시스템에서 전송을 지연시킵니다. Send 메서드가 성공적으로 완료되면 내부 시스템에 네트워크 전송을 위해 데이터를 버퍼링할 공간이 있다는 것을 의미합니다.

참고참고

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

참고참고

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

참고참고

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

다음 코드 예제에서는 연결된 Socket에 데이터를 보내기 위해 데이터 버퍼, 오프셋, 크기 및 SocketFlags를 지정합니다.


// 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, 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);
        return (e.ErrorCode);
    }
    return 0;
}


.NET Framework

4.5, 4, 3.5, 3.0, 2.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

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

커뮤니티 추가 항목

추가
표시:
© 2015 Microsoft