다음을 통해 공유


Windows 소켓: 클래스 CAsyncSocket 사용

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

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

네트워크 통신에 대해 잘 모르고 간단한 솔루션을 원하는 경우 CSocket 개체와 함께 클래스 CArchive 사용합니다. 자세한 내용은 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 Sockets: 작업 순서 문서 을 참조하세요.

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

    CAsyncSocket에서 Windows 소켓 사양과 클래스 을(를) 참조하세요.

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

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

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

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

당신의 CAsyncSocket 책임

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

  • "차단" 시나리오.

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

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

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

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

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

참고하십시오

MFC에서의 Windows 소켓