이 문서에서는 CSocket 프로그래밍 모델에 대해 설명합니다. 클래스 CSocket 은 CAsyncSocket 클래스보다 높은 추상화 수준에서 소켓 지원을 제공합니다.
CSocket
는 MFC serialization 프로토콜 버전을 사용하여 MFC CArchive 개체를 통해 소켓 개체와 데이터를 전달합니다.
CSocket
는 차단 기능을 제공하며 (Windows 메시지의 백그라운드 처리를 관리하는 동안) CArchive
에 대한 액세스 권한을 제공합니다. 이는 원시 API나 클래스 CAsyncSocket
를 사용하여 직접 수행해야 할 통신의 여러 측면을 관리합니다.
팁 (조언)
클래스 CSocket
자체를 보다 편리한 버전CAsyncSocket
으로 사용할 수 있지만 가장 간단한 프로그래밍 모델은 개체와 함께 CSocket
사용하는 CArchive
것입니다.
보관을 사용하여 소켓을 구현하는 방법에 대한 자세한 내용은 Windows 소켓: 보관을 사용하는 소켓 작동 방식을 참조하세요. 예제 코드는 Windows 소켓: 작업 시퀀스 및 Windows 소켓: 보관을 사용하는 소켓 예제를 참조하세요. 소켓 클래스에서 고유한 클래스를 파생시켜 얻을 수 있는 기능 중 일부에 대한 자세한 내용은 Windows 소켓: 소켓 클래스에서 파생을 참조하세요.
비고
설정된(MFC가 아닌) 서버와 통신하도록 MFC 클라이언트 프로그램을 작성하는 경우 보관을 통해 C++ 개체를 보내지 마세요. 서버가 보내려는 개체의 종류를 이해하는 MFC 애플리케이션이 아니면 개체를 수신하고 역직렬화할 수 없습니다. MFC가 아닌 애플리케이션과 통신하는 주제에 대한 관련 자료는 Windows 소켓: 바이트 순서 지정 문서를 참조하세요.
CSocket 프로그래밍 모델
개체를 CSocket
사용하려면 여러 MFC 클래스 개체를 만들고 연결해야 합니다. 아래 일반 절차에서는 각 소켓 유형에 다른 작업이 필요한 3단계를 제외하고 서버 소켓과 클라이언트 소켓 모두에서 각 단계를 수행합니다.
팁 (조언)
런타임에 서버 애플리케이션은 일반적으로 클라이언트 애플리케이션이 연결을 검색할 때 먼저 준비하고 "수신 대기"하기 시작합니다. 클라이언트가 연결을 시도할 때 서버가 준비되지 않은 경우 일반적으로 사용자 애플리케이션이 나중에 다시 연결을 시도하도록 요구합니다.
서버 소켓과 클라이언트 소켓 간의 통신을 설정하려면
CSocket 개체를 생성합니다.
개체를 사용하여 기본 SOCKET 핸들을 만듭니다.
클라이언트 개체의
CSocket
경우 데이터그램 소켓이 필요한 경우를 제외하고, 일반적으로 기본 매개 변수를 사용하여 Create를 사용해야 합니다. 서버 개체의CSocket
경우 호출에서Create
포트를 지정해야 합니다.비고
CArchive
는 데이터그램 소켓에서 작동하지 않습니다. 데이터그램 소켓에CSocket
를 사용하고 싶다면, 반드시CAsyncSocket
를 사용하는 것처럼, 즉 보관 파일 없이 사용해야 합니다. 데이터그램은 신뢰할 수 없으므로(도착이 보장되지 않으며 반복되거나 순서가 잘못될 수 있음) 보관을 통한 serialization과 호환되지 않습니다. serialization 작업이 안정적으로 그리고 올바른 순서로 완료되기를 기대합니다.CSocket
를CArchive
객체와 함께 데이터그램에 사용하려고 하면 MFC 어설션이 실패합니다.소켓이 클라이언트인 경우 CAsyncSocket::Connect 를 호출하여 소켓 개체를 서버 소켓에 연결합니다.
-또는-
소켓이 서버인 경우 CAsyncSocket::Listen 을 호출하여 클라이언트의 연결 시도 수신 대기를 시작합니다. 연결 요청을 받으면 CAsyncSocket::Accept를 호출하여 수락합니다.
비고
Accept
멤버 함수는 새 빈CSocket
개체를 해당 매개 변수로 참조합니다.Accept
호출하기 전에 이 개체를 생성해야 합니다. 이 소켓 개체가 범위를 벗어나면 연결이 닫힙니다. 이 새 소켓 개체를 호출Create
하지 마세요.CSocketFile 객체를 생성하고 이를
CSocket
객체와 연결합니다.데이터를 로드(수신) 또는 저장(전송)하는 CArchive 개체를 만듭니다. 보관 파일은
CSocketFile
개체와 연결되어 있습니다.CArchive
데이터그램 소켓에서는 작동하지 않습니다.개체를
CArchive
사용하여 클라이언트와 서버 소켓 간에 데이터를 전달합니다.지정된
CArchive
개체는 로드(수신) 또는 저장(전송)을 위해 한 방향으로만 데이터를 이동합니다. 경우에 따라 두CArchive
개의 개체를 사용합니다. 하나는 데이터 전송에, 다른 하나는 승인을 받기 위한 개체입니다.연결을 수락하고 보관 파일을 설정한 후 암호 유효성 검사와 같은 작업을 수행할 수 있습니다.
보관 파일, 소켓 파일 및 소켓 개체를 삭제합니다.
비고
클래스
CArchive
는 클래스IsBufferEmpty
와 함께 사용하기 위해CSocket
멤버 함수를 제공합니다. 예를 들어 버퍼에 여러 데이터 메시지가 포함된 경우 모든 메시지를 읽고 버퍼를 지울 때까지 반복해야 합니다. 그렇지 않으면 수신할 데이터가 있다는 다음 알림이 무기한 지연될 수 있습니다. 데이터를 모두 검색하도록IsBufferEmpty
를 사용하십시오.
Windows 소켓: 작업 시퀀스 문서에서는 예제 코드를 사용하여 이 프로세스의 양면을 보여 줍니다.
자세한 내용은 다음을 참조하세요.