MFC를 사용하여 서버와 클라이언트 소켓 프로그램을 작성할 수 있다. 소켓 프로그래밍은 네트워크 상에서 데이터를 송수신하기 위한 기법으로, 서버와 클라이언트가 서로 데이터를 주고받을 수 있게 한다.
1. 기본 개념
1) 서버(Server)
클라이언트의 요청을 기다리고, 요청을 처리하는 프로그램. 서버는 특정 포트에서 클라이언트의 연결을 기다린다.
2) 클라이언트(Client)
서버에 연결하여 데이터를 요청하거나 서버로 데이터를 보내는 프로그램.
3) 소켓(Socket)
네트워크 상에서 통신을 하기 위한 끝점. 서버와 클라이언트는 각각 소켓을 통해 데이터를 주고받는다.
2. MFC에서의 소켓 클래스 종류
MFC에서는 소켓 프로그래밍을 쉽게 하기 위해 CSocket 클래스와 CAsyncSocket 클래스를 제공.
1) CSocket:
동기 소켓 클래스로, 블로킹 모드로 작동한다. 이는 함수 호출이 완료될 때까지 다른 작업을 수행할 수 없음을 의미한다.
2) CAsyncSocket
비동기 소켓 클래스로, 논블로킹 모드로 작동한다. 이는 함수 호출이 즉시 반환되며, 소켓 이벤트가 발생할 때마다 이벤트 핸들러가 호출된다.
3. 서버 소켓 예제
서버 소켓을 설정하는 기본적인 과정은 다음과 같다.
1) 소켓 객체 생성:
CSocket serverSocket;
2) 소켓 초기화 및 바인딩:
serverSocket.Create(12345); // 포트 번호 12345에서 소켓 생성
3) 연결 대기:
serverSocket.Listen();
4) 클라이언트 연결 수락:
CSocket clientSocket;
serverSocket.Accept(clientSocket); // 클라이언트 연결 수락
5) 데이터 송수신:
char buffer[1024];
clientSocket.Receive(buffer, sizeof(buffer)); // 데이터 수신
clientSocket.Send(buffer, sizeof(buffer)); // 데이터 송신
4. 클라이언트 소켓 예제
클라이언트 소켓을 설정하는 기본적인 과정은 다음과 같다:
1) 소켓 객체 생성
CSocket clientSocket;
2) 소켓 초기화 및 서버 연결:
clientSocket.Create();
clientSocket.Connect(_T("127.0.0.1"), 12345); // 서버 IP와 포트 번호로 연결
3) 데이터 송수신:
char buffer[1024] = "Hello, Server!";
clientSocket.Send(buffer, sizeof(buffer)); // 데이터 송신
clientSocket.Receive(buffer, sizeof(buffer)); // 데이터 수신
5. 비동기 소켓 사용
비동기 소켓을 사용하면 소켓 이벤트(연결, 수신, 전송 등)가 발생할 때마다 이벤트 핸들러를 호출하도록 설정할 수 있다. 이를 위해 CAsyncSocket 클래스를 사용합니다.
1) 클래스 정의:
class CMyAsyncSocket : public CAsyncSocket {
public:
virtual void OnReceive(int nErrorCode);
virtual void OnAccept(int nErrorCode);
// 다른 이벤트 핸들러들...
};
2) 이벤트 핸들러 구현:
void CMyAsyncSocket::OnReceive(int nErrorCode) {
// 데이터 수신 처리
}
void CMyAsyncSocket::OnAccept(int nErrorCode) {
// 연결 수락 처리
}
6. 결론
MFC를 사용하면 소켓 프로그래밍을 보다 쉽게 구현할 수 있다. CSocket과 CAsyncSocket 클래스를 사용하여 동기 및 비동기 소켓 통신을 구현할 수 있다.
'MFC' 카테고리의 다른 글
Visual studio에 OpenCV 연동하기 (0) | 2024.06.20 |
---|---|
MFC_ & 는 왜 사용할까?(&연산자) (0) | 2024.05.24 |
MFC_문자열(L접두사 기능) (0) | 2024.05.09 |
MFC_문자열(_T 메크로 기능) (0) | 2024.05.09 |
MFC_ 문자열(_T 매크로 , L 접두사) (0) | 2024.05.09 |