2 augusti, 2019 admin

mfc 소켓 프로그래밍 예제

두 개의 MFC Windows 소켓 프로그래밍 모델은 CAsyncSocket에서 파생된 이 클래스는 MFC CArchive 개체를 통해 소켓작업을 위해 더 높은 수준의 추상화를 제공합니다. 아카이브가 있는 소켓을 사용하는 것은 MFC의 파일 직렬화 프로토콜을 사용하는 것과 매우 유사합니다. 이렇게 하면 CAsyncSocket 모델보다 사용하기가 더 쉽습니다. CSocket은 Windows 소켓 API를 캡슐화하는 CAsyncSocket에서 많은 멤버 함수를 상속합니다. 이러한 기능 중 일부를 사용하고 일반적으로 소켓 프로그래밍을 이해해야 합니다. 그러나 CSocket은 원시 API 또는 클래스 CAsyncSocket을 사용하여 직접 해야 하는 통신의 여러 측면을 관리합니다. 가장 중요한 것은 CSocket은 CArchive의 동기 작업에 필수적인 차단(Windows 메시지의 백그라운드 처리 포함)을 제공합니다. * 호출 블록, 비 차단 소켓 대 차단 소켓으로 이동합니다. 예를 들어 텔넷에 대해 이야기해 보겠습니다.

포트 23의 원격 호스트에 텔넷(클라이언트)을 연결하면 해당 호스트의 프로그램(텔넷, 서버라고 함)이 생겨나게 됩니다. 그것은 들어오는 텔넷 연결을 처리, 로그인 프롬프트 등으로 우리를 설정합니다. 서버가 주소에 바인딩되면 서버는 소켓에서 listen()를 호출할 수 있습니다. 이 호출의 매개 변수는 소켓(fd)이며 최대 큐에 대기된 연결 수는 backlog_queue_size까지 요청됩니다. 성공 시 0을 반환하고 오류에 대해 -1을 반환합니다. MFC 소켓 클래스를 사용하여 소켓 프로그래밍을 수행하는 가장 쉬운 방법을 설명합니다. 이렇게 하면 작업이 쉬워질 뿐만 아니라 네트워크 응용 프로그램의 개발 시간도 단축됩니다. 작성하는 모든 네트워크 기반 응용 프로그램에서 다시 사용할 수 있는 사용자 지정 만든 소켓 클래스를 개발할 수 있습니다. 에코 서버 응용 프로그램을 개발하여 이러한 개념을 설명합니다. *버퍼에서 소켓 fd로 n바이트를 보냅니다. 전송된 바이트 수 또는 오류시 -1을 반환합니다.

이제 소켓을 사용하여 데이터를 보내고 읽을 수 있습니다. 그러나 알림(이벤트)이 어떻게 작동하는지 먼저 알아두어야 하며, 그렇지 않으면 새 데이터를 읽을 수 있는 시기나 어떤 이유로 소켓의 연결이 끊어지는지 알 수 없습니다. 처음에 설명했듯이 이러한 함수는 주 응용 프로그램 스레드가 아닌 다른 스레드에서 호출됩니다. 창 스레드에서 무언가를 실행해야 하는 경우 CMySocket 예제에서 볼 수 있듯이 PostMessage를 사용하여 메시지를 보내야 합니다.