mfc socket 통신 예제

소켓은 프로그램이 들어오는 연결을 수락하고, 나가는 연결을 만들고, 데이터를 보내고 받을 수 있도록 하는 파일과 유사한 개체입니다. 두 컴퓨터가 통신하기 전에 둘 다 소켓 개체를 만들어야 합니다. 서버 소켓이 특정 포트를 수신 대기하도록 하려면 Listen()를 호출해야 합니다. 호출의 성공 또는 실패를 나타내는 값을 반환합니다: 서버 소켓을 수동 모드로 두고 클라이언트가 서버에 연결될 때까지 기다립니다. 백로그는 sockfd에 대한 보류 중인 연결큐가 증가할 수 있는 최대 길이를 정의합니다. 큐가 가득 찼을 때 연결 요청이 도착하면 클라이언트가 ECONNREFUSED를 표시하는 오류를 받을 수 있습니다. C의 소켓은 파일 설명기를 사용하여 자신을 식별하기 때문에 파일처럼 행동합니다. 소켓은 read() 및 write()를 사용하여 소켓 파일 설명기를 사용하여 데이터를 수신하고 보낼 수 있는 파일과 매우 유사합니다. 소켓은 웹을 탐색할 때 사용되는 표준 인터넷 프로토콜에서 다양한 프로토콜을 사용하여 통신하는 데 사용할 수 있습니다. 이러한 패밀리는 비트/socket.h로 정의되며 sys/socket.h에서 자동으로 포함됩니다. 다음은 man 페이지의 설명입니다: “수신 대기 중인 연결 큐에서 첫 번째 연결 요청을 추출하여 sockfd를 만들고, 새 연결된 소켓을 만들고, 해당 소켓을 참조하는 새 파일 설명기를 반환합니다. 새로 만든 소켓이 수신 대기 상태에 있지 않습니다. 원래 소켓 양말은이 호출의 영향을받지 않습니다”.

소켓을 만든 후 bind 함수는 addr(사용자 지정 데이터 구조)에 지정된 주소 및 포트 번호에 소켓을 바인딩합니다. 예제 코드에서는 서버를 로컬 호스트에 바인딩하므로 INADDR_ANY를 사용하여 IP 주소를 지정합니다. Boost.Asio를 사용하여 소켓 프로그래밍의 경우 다음 을 방문하십시오: 소켓 클래스의 SetParentDlg 함수는 소켓 이벤트가 발생할 때 대화 상자 클래스에 알림이 수신되도록 호출됩니다. send() 함수는 문자열 Hello, worldn”의 13바이트를 새 연결을 설명하는 새 소켓으로 보냅니다. listen() 호출은 소켓에 들어오는 연결을 수신하도록 지시하고 후속 accept() 호출은 실제로 들어오는 연결을 수락합니다. listen() 함수는 accept() 호출이 연결을 수락할 때까지 들어오는 모든 연결을 백로그 큐에 배치합니다. listen() 호출에 대한 마지막 인수는 백로그 큐의 최대 크기를 설정합니다. * 호출 블록, 비 차단 소켓 대 차단 소켓으로 이동합니다. 소켓 프로그래밍이란 무엇입니까? 소켓 프로그래밍은 네트워크에서 두 노드를 연결하여 서로 통신하는 방법입니다. 한 소켓(노드)은 IP에서 특정 포트를 수신하는 반면 다른 소켓은 다른 소켓에 연결하여 연결됩니다. 클라이언트가 서버에 도달하는 동안 서버는 수신기 소켓을 형성합니다.

서버 측에서 소켓을 설정하는 단계는 클라이언트 소켓과 비교할 때 소켓 서버를 작성하기가 약간 어렵습니다. Windows 소켓 서버 프로그램은 클라이언트와 데이터를 기다렸다가 수락하고 교환해야 합니다. 소켓 서버는 클라이언트 수, 연결 수락, 데이터 수신 및 전송 등에 대해 걱정해야 하며, 클라이언트 측 프로그래밍과 비교할 때 더 어렵습니다. 이 문서에서는 MFC Server용 Windows 소켓 프로그램을 만드는 다중 스레드가 아닌 접근 방식에 대해 설명합니다. MFC는 Windows 소켓으로 네트워크 통신 프로그램을 작성하기 위한 클래스 CSocket을 제공합니다. 이 클래스는 Windows 소켓 API를 캡슐화합니다. CAsyncSocket은 네트워크 프로그래밍을 알고 소켓 API에 직접 프로그래밍의 유연성을 원하지만 네트워크 이벤트 알림을 위한 콜백 기능의 편리함을 원하는 프로그래머를 위한 것입니다. C++에서 사용하기 위해 개체 지향 양식의 소켓을 패키징하는 것 이외에 이 클래스가 제공하는 유일한 추가 추상화는 특정 소켓 관련 Windows 메시지를 콜백으로 변환하는 것입니다.