다음을 통해 공유


Windows 소켓: 클래스 사용 CAsyncSocket

이 문서에서는 클래스 CAsyncSocket를 사용하는 방법을 설명합니다. 이 클래스는 매우 낮은 수준에서 Windows 소켓 API를 캡슐화합니다. CAsyncSocket 는 네트워크 통신을 자세히 알고 있지만 네트워크 이벤트 알림에 대한 콜백의 편의를 원하는 프로그래머가 사용하기 위한 것입니다. 이 가정에 따라 이 문서에서는 기본 명령만 제공합니다. MFC 애플리케이션에서 여러 네트워크 프로토콜을 쉽게 처리할 수 있도록 Windows 소켓을 사용하지만 유연성을 희생하지 않으려면 사용하는 CAsyncSocket 것이 좋습니다. 또한 보다 일반적인 대체 클래스 CSocket모델을 사용하는 것보다 직접 통신을 프로그래밍하여 효율성을 높일 수 있다고 생각할 수도 있습니다.

CAsyncSocket 는 MFC 참조에 설명되어 있습니다. Visual C++는 Windows SDK에 있는 Windows 소켓 사양도 제공합니다. 세부 정보는 사용자에게 맡깁니다. Visual C++는 샘플 애플리케이션을 CAsyncSocket제공하지 않습니다.

네트워크 통신에 대해 잘 모르고 간단한 솔루션을 원하는 경우 개체와 함께 클래스 CSocketCArchive 사용합니다. 자세한 내용은 Windows 소켓: 보관 파일과 함께 소켓 사용

이 문서에서 다루는 내용:

만들기 및 사용 CAsyncSocket

사용하려면 CAsyncSocket

  1. 개체를 CAsyncSocket 생성하고 개체를 사용하여 기본 핸들을 만듭니다 SOCKET .

    소켓 생성은 2단계 생성의 MFC 패턴을 따릅니다.

    예시:

    CAsyncSocket sock;
    sock.Create(); // Use the default parameters
    

    또는

    CAsyncSocket *pSocket = new CAsyncSocket;
    int nPort = 27;
    pSocket->Create(nPort, SOCK_DGRAM);
    

    위의 첫 번째 생성자는 스택에 개체를 만듭니다 CAsyncSocket . 두 번째 생성자는 힙에 만듭니다 CAsyncSocket . 위의 첫 번째 Create 호출은 기본 매개 변수를 사용하여 스트림 소켓을 만듭니다. 두 번째 Create 호출은 지정된 포트 및 주소를 사용하여 데이터그램 소켓을 만듭니다. (두 버전 중 하나를 Create 생성 방법으로 사용할 수 있습니다.)

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

    • "port": 짧은 정수입니다.

      서버 소켓의 경우 포트를 지정해야 합니다. 클라이언트 소켓의 경우 일반적으로 Windows 소켓이 포트를 선택할 수 있도록 하는 이 매개 변수의 기본값을 허용합니다.

    • 소켓 유형: SOCK_STREAM (기본값) 또는 SOCK_DGRAM.

    • 소켓 "주소"(예: "ftp.microsoft.com" 또는 "128.56.22.8".

      네트워크의 IP(인터넷 프로토콜) 주소입니다. 이 매개 변수의 기본값은 항상 사용할 수 있습니다.

    "포트" 및 "소켓 주소"라는 용어는 Windows 소켓: 포트 및 소켓 주소에 설명되어 있습니다.

  2. 소켓이 클라이언트인 경우 .를 사용하여 CAsyncSocket::Connect소켓 개체를 서버 소켓에 연결합니다.

    또는

    소켓이 서버인 경우 클라이언트의 연결 시도에 대해 수신 대기를 CAsyncSocket::Listen시작하도록 소켓을 설정합니다. 연결 요청을 CAsyncSocket::Accept받으면 .

    연결을 수락한 후 암호 유효성 검사와 같은 작업을 수행할 수 있습니다.

    참고 항목

    멤버 함수는 Accept 새 빈 CSocket 개체를 해당 매개 변수로 참조합니다. 를 호출 Accept하기 전에 이 개체를 생성해야 합니다. 이 소켓 개체가 범위를 벗어나면 연결이 닫힙니다. 이 새 소켓 개체를 호출 Create 하지 마세요. 예를 들어 Windows 소켓: 작업 시퀀스 문서를 참조하세요.

  3. Windows 소켓 API 함수를 캡슐화하는 개체의 멤버 함수를 호출 CAsyncSocket 하여 다른 소켓과의 통신을 수행합니다.

    MFC 참조에서 Windows 소켓 사양 및 클래스 CAsyncSocket참조하세요.

  4. 개체를 CAsyncSocket 삭제합니다.

    스택에서 소켓 개체를 만든 경우 포함하는 함수가 범위를 벗어날 때 해당 소멸자가 호출됩니다. 연산자를 사용하여 힙에 소켓 개체를 new 만든 경우 연산자를 delete 사용하여 개체를 삭제해야 합니다.

    소멸자가 개체를 삭제하기 전에 개체의 Close 멤버 함수를 호출합니다.

코드에서 이 시퀀스의 예(실제로 개체의 CSocket 경우)는 Windows 소켓: 작업 시퀀스를 참조 하세요.

사용자의 책임 CAsyncSocket

클래스 CAsyncSocket의 개체를 만들 때 개체는 Windows SOCKET 핸들을 캡슐화하고 해당 핸들에 대한 작업을 제공합니다. 사용할 CAsyncSocket때 API를 직접 사용하는 경우 발생할 수 있는 모든 문제를 처리해야 합니다. 예시:

  • "차단" 시나리오.

  • 송신 컴퓨터와 받는 컴퓨터 간의 바이트 순서 차이입니다.

  • 유니코드와 MBCS(멀티바이트 문자 집합) 문자열 간 변환

이러한 용어 및 추가 정보에 대한 정의는 Windows 소켓: 차단, Windows 소켓: 바이트 순서 지정, Windows 소켓: 문자열 변환을 참조하세요.

이러한 문제에도 불구하고 애플리케이션에 얻을 수 있는 모든 유연성과 제어가 필요한 경우 클래스 CAsyncSocket 가 적합한 선택이 될 수 있습니다. 그렇지 않은 경우 클래스 CSocket 를 대신 사용하는 것이 좋습니다. CSocket 는 많은 세부 정보를 숨깁니다. 차단 호출 중에 Windows 메시지를 펌핑하고 바이트 순서 차이 및 문자열 변환을 관리하는 액세스 권한을 CArchive제공합니다.

자세한 내용은 다음을 참조하세요.

참고 항목

MFC의 Windows 소켓