본문 바로가기

분류 전체보기174

IOCP 서버 제작 실습 4 Send의 구조를 1-Send로 변경 N-Send : 이전 비동기 Send에 대한 완료를 확인하지 않고 곧바로 다음 Send를 호출 1-Send : 이전 비동기 Send에 대한 완료가 확인되었을 때만 다음 Send를 호출 따라서 Send할 데이터를 별도의 버퍼에 보관하는 과정이 필요함 IOCPServer.h stClientInfo 객체를 할당하여 관리하도록 mClientInfos를 vector로 변경 StartServer() 함수 호출시 SendThread를 생성하도록 변경 //Send 쓰레드 std::threadmSendThread; //Send 쓰레드 동작 플래그 boolmIsSenderRun = false; void SendThread() { while(mIsSenderRun) { for (auto.. 2023. 3. 22.
IOCP 서버 제작 실습 3 서버 로직(Send / Recv) 처리를 별도의 쓰레드로 분리 클라이언트의 I/O 관련 함수 및 구조체를 ClientInfo.h로 분리 패킷 관련 정보를 PacketData 구조체에 저장하여 Packet.h로 분리 Main 함수의 흐름을 따라가면서 구조를 설명 #include "EchoServer.h" #include #include const UINT16 SERVER_PORT = 11021; const UINT16 MAX_CLIENT = 100; int main() { EchoServer server; //소켓 초기화 server.InitSocket(); //소켓 서버 등록 server.BindandListen(SERVER_PORT); server.Run(MAX_CLIENT); std::cout Get.. 2023. 3. 22.
IOCP 서버 제작 실습 2 기존에는 데이터 버퍼가 Overlapped 구조체 확장형에 존재(m_szBuf) 비동기 I/O 요청시마다 Overlapped 구조체가 생성됨 그러나 버퍼 크기보다 데이터가 작을 수 있고, 버퍼를 사용하지 않는 I/O 요청이 있을 수도 있음 따라서 현재 구조로는 불필요한 메모리 낭비가 발생할 수 있음 struct stOverlappedEx { WSAOVERLAPPEDm_wsaOverlapped;//OVERLAPPED 구조체 SOCKETm_socketClient;//클라이언트 소켓 WSABUFm_wsaBuf;//Overlapped I/O 작업 버퍼 charm_szBuf[MAX_SOCKBUF];//데이터 버퍼 IOOperationm_eOperation;//작업 동작 종류 }; 따라서 데이터 버퍼를 클라이언트 .. 2023. 3. 21.
IOCP 서버 제작 실습 1 https://www.youtube.com/watch?v=RMRsvll7hrM https://github.com/jacking75/edu_cpp_IOCP GitHub - jacking75/edu_cpp_IOCP: IOCP 실습 IOCP 실습. Contribute to jacking75/edu_cpp_IOCP development by creating an account on GitHub. github.com 위 링크의 IOCP 실습 자료를 통해 공부 단, IOCP 관련 지식은 따로 습득해야 링크의 단계별 실습을 따라갈 수 있음 기초적인 IOCP 에코 서버 구현 //main.cpp #include "IOCompletionPort.h" const UINT16 SERVER_PORT = 11021; const .. 2023. 3. 21.