소켓 성능 기술 샘플

업데이트: 2007년 11월

이 샘플은 System.Net.Sockets.Socket 클래스의 향상된 기능을 통해 비동기 네트워크 I/O를 사용하여 최고 성능을 발휘하는 서버 응용 프로그램을 빌드하는 방법을 보여 줍니다.

샘플 사용에 대한 자세한 내용은 다음 항목을 참조하십시오.

명령 프롬프트를 사용하여 샘플을 빌드하려면

  1. 명령 프롬프트 창을 열고 AsyncSocketServer 디렉터리의 CS 하위 디렉터리로 이동합니다. 필요한 설정 및 SDK 명령 프롬프트에 대한 자세한 내용은 방법: 샘플 설정 변경을 참조하십시오.

  2. 명령줄에서 msbuild AsyncSocketServer.sln을 입력합니다. 이 명령은 AsyncSocketServer 및 AsyncSocketClient 응용 프로그램을 모두 빌드합니다.

Visual Studio를 사용하여 샘플을 빌드하려면

  1. Windows 탐색기를 열고 AsyncSocketServer 디렉터리의 CS 하위 디렉터리로 이동합니다.

  2. AsyncSocketServer.sln의 아이콘을 두 번 클릭하여 Visual Studio에서 파일을 엽니다.

  3. 빌드 메뉴에서 솔루션 빌드를 선택합니다.

AsyncSocketServer 및 AsyncSocketClient 응용 프로그램이 모두 기본 \bin 또는 \bin\Debug 디렉터리에서 빌드됩니다.

이 샘플을 실행하려면

  1. 명령 프롬프트를 사용하여 새 실행 파일이 포함된 디렉터리로 이동합니다.

  2. 명령줄에서 AsyncSocketServer.exe와 적절한 명령줄 인수를 입력하여 AsyncSocketServer 응용 프로그램을 실행합니다.

  3. 명령줄에서 AsyncSocketClient.exe와 적절한 명령줄 인수를 입력하여 AsyncSocketServer 응용 프로그램을 테스트하기 위한 AsyncSocketClient 응용 프로그램을 실행합니다.

요구 사항

이 샘플을 사용하려면 .NET Framework v3.5, 3.0 SP1 또는 2.0 SP1이 필요합니다.

세부 항목

특수 고성능 소켓 응용 프로그램에서 사용할 수 있는 대체 비동기 패턴을 제공하는 일련의 새 클래스가 기능 향상의 일환으로 System.Net.Sockets.Socket 클래스에 추가되었습니다. 이러한 향상된 기능은 특히 고성능을 필요로 하는 네트워크 서버 응용 프로그램을 위해 설계되었습니다. 응용 프로그램은 향상된 비동기 패턴을 단독으로 사용하거나, 응용 프로그램의 지정된 영역(예: 대량의 데이터를 받을 때)에서만 사용할 수 있습니다.

AsyncSocketServer 샘플은 에코 서버를 구현하여 이러한 새 메서드를 System.Net.Sockets.Socket 클래스에서 사용하는 방법을 보여 줍니다. 서버는 클라이언트에서 읽은 모든 데이터를 클라이언트로 다시 보냅니다. 이 샘플에 구현되어 있는 에코 서버는 동시에 여러 클라이언트(최대 클라이언트 수는 명령줄 인수로 지정됨)를 처리하며 이벤트 기반 비동기 소켓 메서드의 몇 가지 핵심 요소를 설명합니다. AsyncSocketServer 샘플은 서버 성능을 향상시키기 위한 방법으로 다시 사용할 수 있는 데이터 버퍼 및 System.Net.Sockets.SocketAsyncEventArgs 컨텍스트 개체의 풀을 만드는 방법을 보여 줍니다.

AsyncSocketClient 샘플은 AsyncSocketServer 샘플 응용 프로그램을 테스트하기 위해 사용하는 간단한 클라이언트 응용 프로그램입니다. AsyncSocketClient 샘플은 System.Net.Sockets.Socket 클래스의 새로 향상된 기능을 사용하지 않습니다.

AsyncSocketServer 응용 프로그램은 네 개의 명령줄 매개 변수를 필요로 합니다.

AsyncSocketServer.exe <numConnections> <receiveSize > <addressFamily> <localPortNum>

해당 매개 변수는 다음과 같습니다.

  • numConnections - 서버가 동시에 받아들일 수 있는 최대 연결 수입니다.

  • receiveSize - 각 수신 작업에 대해 서버에서 사용되는 버퍼 크기(바이트)입니다.

  • addressFamily - 서버가 들어오는 연결을 수신 대기하는 데 사용할 소켓의 주소 패밀리입니다. 지원되는 값은 ipv4 및 ipv6입니다.

  • localPortNum - 서버가 바인딩될 로컬 포트입니다.

각 수신 작업에 대해 1024바이트 버퍼 크기로 IPv4에서 500개의 연결을 허용하고 포트 8000에서 수신 대기하는 사용 예제는 다음과 같습니다.

AsyncSocketServer.exe 500 1024 ipv4 8000

AsyncSocketClient 응용 프로그램은 두 개의 명령줄 매개 변수를 필요로 합니다.

AsyncSocketClient.exe <destIPAddress> <destPortNum>

해당 매개 변수는 다음과 같습니다.

  • destIpaddress - AsyncSocketServer가 연결할 대상 IP 주소입니다.

  • destPortNum - AsyncSocketServer의 대상 포트 번호입니다.

참고 항목

참조

System.Net.Sockets.Socket

System.Net.Sockets.SendPacketsElement

System.Net.Sockets.SocketAsyncEventArgs

System.Net.Sockets.SocketAsyncOperation