Windows 소켓: 클래스 사용 CAsyncSocket
이 문서에서는 클래스 CAsyncSocket
를 사용하는 방법을 설명합니다. 이 클래스는 매우 낮은 수준에서 Windows 소켓 API를 캡슐화합니다. CAsyncSocket
는 네트워크 통신을 자세히 알고 있지만 네트워크 이벤트 알림에 대한 콜백의 편의를 원하는 프로그래머가 사용하기 위한 것입니다. 이 가정에 따라 이 문서에서는 기본 명령만 제공합니다. MFC 애플리케이션에서 여러 네트워크 프로토콜을 쉽게 처리할 수 있도록 Windows 소켓을 사용하지만 유연성을 희생하지 않으려면 사용하는 CAsyncSocket
것이 좋습니다. 또한 보다 일반적인 대체 클래스 CSocket
모델을 사용하는 것보다 직접 통신을 프로그래밍하여 효율성을 높일 수 있다고 생각할 수도 있습니다.
CAsyncSocket
는 MFC 참조에 설명되어 있습니다. Visual C++는 Windows SDK에 있는 Windows 소켓 사양도 제공합니다. 세부 정보는 사용자에게 맡깁니다. Visual C++는 샘플 애플리케이션을 CAsyncSocket
제공하지 않습니다.
네트워크 통신에 대해 잘 모르고 간단한 솔루션을 원하는 경우 개체와 함께 클래스 CSocket
를 CArchive
사용합니다. 자세한 내용은 Windows 소켓: 보관 파일과 함께 소켓 사용
이 문서에서 다루는 내용:
개체 만들기 및 사용
CAsyncSocket
만들기 및 사용 CAsyncSocket
사용하려면 CAsyncSocket
개체를
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 소켓: 포트 및 소켓 주소에 설명되어 있습니다.
소켓이 클라이언트인 경우 .를 사용하여
CAsyncSocket::Connect
소켓 개체를 서버 소켓에 연결합니다.또는
소켓이 서버인 경우 클라이언트의 연결 시도에 대해 수신 대기를
CAsyncSocket::Listen
시작하도록 소켓을 설정합니다. 연결 요청을CAsyncSocket::Accept
받으면 .연결을 수락한 후 암호 유효성 검사와 같은 작업을 수행할 수 있습니다.
참고 항목
멤버 함수는
Accept
새 빈CSocket
개체를 해당 매개 변수로 참조합니다. 를 호출Accept
하기 전에 이 개체를 생성해야 합니다. 이 소켓 개체가 범위를 벗어나면 연결이 닫힙니다. 이 새 소켓 개체를 호출Create
하지 마세요. 예를 들어 Windows 소켓: 작업 시퀀스 문서를 참조하세요.Windows 소켓 API 함수를 캡슐화하는 개체의 멤버 함수를 호출
CAsyncSocket
하여 다른 소켓과의 통신을 수행합니다.MFC 참조에서 Windows 소켓 사양 및 클래스
CAsyncSocket
를 참조하세요.개체를
CAsyncSocket
삭제합니다.스택에서 소켓 개체를 만든 경우 포함하는 함수가 범위를 벗어날 때 해당 소멸자가 호출됩니다. 연산자를 사용하여 힙에 소켓 개체를
new
만든 경우 연산자를delete
사용하여 개체를 삭제해야 합니다.소멸자가 개체를 삭제하기 전에 개체의
Close
멤버 함수를 호출합니다.
코드에서 이 시퀀스의 예(실제로 개체의 CSocket
경우)는 Windows 소켓: 작업 시퀀스를 참조 하세요.
사용자의 책임 CAsyncSocket
클래스 CAsyncSocket
의 개체를 만들 때 개체는 Windows SOCKET
핸들을 캡슐화하고 해당 핸들에 대한 작업을 제공합니다. 사용할 CAsyncSocket
때 API를 직접 사용하는 경우 발생할 수 있는 모든 문제를 처리해야 합니다. 예시:
"차단" 시나리오.
송신 컴퓨터와 받는 컴퓨터 간의 바이트 순서 차이입니다.
유니코드와 MBCS(멀티바이트 문자 집합) 문자열 간 변환
이러한 용어 및 추가 정보에 대한 정의는 Windows 소켓: 차단, Windows 소켓: 바이트 순서 지정, Windows 소켓: 문자열 변환을 참조하세요.
이러한 문제에도 불구하고 애플리케이션에 얻을 수 있는 모든 유연성과 제어가 필요한 경우 클래스 CAsyncSocket
가 적합한 선택이 될 수 있습니다. 그렇지 않은 경우 클래스 CSocket
를 대신 사용하는 것이 좋습니다. CSocket
는 많은 세부 정보를 숨깁니다. 차단 호출 중에 Windows 메시지를 펌핑하고 바이트 순서 차이 및 문자열 변환을 관리하는 액세스 권한을 CArchive
제공합니다.
자세한 내용은 다음을 참조하세요.