mfc 소켓 클라이언트 예제

다음은 OnAccept/AcceptServiceSocket 함수를 설명하는 간단한 예제입니다. 서버 소켓을 만들려면 CAsyncSocket 형식의 변수 또는 CAsyncSocket 또는 CSocket에서 파생된 고유한 클래스를 선언해야 합니다. 그런 다음 인수로 수신대기하려면 포트가 있는 create() 함수를 호출해야 합니다. 호출의 성공 또는 실패를 나타내는 값을 반환합니다: 들어오는 연결은 수신 소켓이 아닌 다른 소켓에 수락되어야 합니다. 두 번째 소켓을 인수로 Accept 함수를 호출하여 수행됩니다. 클래스의 모든 단일 함수를 사용하는 방법을 자세히 설명하기 전에 CCESocket은 데이터 수신을 위해 두 개의 독립스레드를 사용하고 다른 하나는 연결을 수락하는 데 사용한다는 것을 알아야한다고 생각합니다(소켓이 수락하는 경우). 두 스레드 모두 Winsock API 함수에 대한 차단 호출을 사용하여 CPU 사용량을 최소화합니다. 이벤트를 호출하기 때문에 이러한 스레드가 존재하므로(가상 함수, 알림 참조) 이벤트를 받을 때 주 스레드와 다른 스레드에 있습니다. 소켓이 서버이고 어떤 이유로 읽기(UDP) 또는 수락(TCP) 스레드가 실패하면 TCP 또는 UDP 소켓이 모두 EVN_SERVERDOWN 이벤트를 반환합니다. 이 경우 서버를 다시 생성하려면 클라이언트 소켓과 비교할 때 쓰기가 약간 어렵고 수락: 소켓 서버다음에 TCP 만들기를 호출해야 합니다. Windows 소켓 서버 프로그램은 클라이언트와 데이터를 기다렸다가 수락하고 교환해야 합니다. 소켓 서버는 클라이언트 수, 연결 수락, 데이터 수신 및 전송 등에 대해 걱정해야 하며, 클라이언트 측 프로그래밍과 비교할 때 더 어렵습니다. 이 문서에서는 MFC Server용 Windows 소켓 프로그램을 만드는 다중 스레드가 아닌 접근 방식에 대해 설명합니다.

클라이언트를 실행하려면 전체 클라이언트 소스 코드를 컴파일하고 실행 파일을 실행합니다. 클라이언트 응용 프로그램에는 클라이언트가 실행될 때 서버 응용 프로그램이 실행 중인 컴퓨터의 컴퓨터 또는 IP 주소 이름이 명령줄 매개 변수로 전달되도록 요구합니다. 클라이언트와 서버가 샘플 컴퓨터에서 실행되는 경우 클라이언트를 다음과 같이 시작할 수 있습니다. 그러나 알림(이벤트)이 어떻게 작동하는지 먼저 알아두어야 하며, 그렇지 않으면 새 데이터를 읽을 수 있는 시기나 어떤 이유로 소켓의 연결이 끊어지는지 알 수 없습니다. 처음에 설명했듯이 이러한 함수는 주 응용 프로그램 스레드가 아닌 다른 스레드에서 호출됩니다. 창 스레드에서 무언가를 실행해야 하는 경우 CMySocket 예제에서 볼 수 있듯이 PostMessage를 사용하여 메시지를 보내야 합니다. MFC 개체에는 이 필수가 됩니다. 스레드 간에 전달되는 경우 작동하지 않으며 정의된 동일한 스레드에서 이러한 개체를 사용해야 합니다. 이러한 함수는 아래와 같이 소켓 클래스에서 호출됩니다: TCP 소켓에 대한 SOCK_STREAM 반환, UDP 소켓에 대한 SOCK_DGRAM.

Microsoft는 클라이언트 및 서버 응용 프로그램을 모두 프로그래밍하기 위한 많은 API를 제공합니다. 많은 새로운 응용 프로그램이 인터넷을 위해 작성되고 있으며 기술, 브라우저 기능 및 보안 옵션이 변경됨에 따라 새로운 유형의 응용 프로그램이 작성됩니다. 사용자 지정 응용 프로그램은 정보를 검색하고 인터넷에서 데이터를 제공할 수 있습니다. 이 클래스는 Windows 소켓 API를 캡슐화합니다. CAsyncSocket은 네트워크 프로그래밍을 알고 소켓 API에 직접 프로그래밍의 유연성을 원하지만 네트워크 이벤트 알림을 위한 콜백 기능의 편리함을 원하는 프로그래머를 위한 것입니다. C++에서 사용하기 위해 개체 지향 양식의 소켓을 패키징하는 것 이외에 이 클래스가 제공하는 유일한 추가 추상화는 특정 소켓 관련 Windows 메시지를 콜백으로 변환하는 것입니다.