programing150 IO 멀티플렉싱 기반 서버 - 프로세스의 생성을 동반하지 않고 다수의 클라이언트에게 서비스 제공하는 방법 - 멀티플렉싱 : 하나의 통신채널을 통해서 둘 이상의 데이터를 전송하는 데 사용되는 기술 물리적 장치의 효율성을 높이기 위해서 최소한의 물리적인 요소만을 사용해서 최대한의 데이터를 전달하기 위해 사용되는 기술 - 멀티플렉싱을 적용 시킬 경우 서버는 접속한 클라 수에 상관없이 프로세스 하나만으로 연결이 가능 - select() > 한 곳에 여러 개의 파일 디스크립터를 모아놓고 동시에 관찰 가능 (파일 디스크립터 관찰 = 소켓 관찰) -> 수신한 데이터를 지니고 있는 소켓 존재? -> 블로킹 되지 않고 전송 가능한 소켓은 무엇? -> 예외상황이 발생한 소켓은 무엇? cf. 관찰 항목 각각을 event 라 함 int select( .. 2015. 5. 15. Half-close, DNS, 소켓 옵션 - closesocket() : 일방적인 완전 종료, 데이터 전송과 수신이 더이상 불가능. => 수신 도중 연결이 종료 되면 수신 데이터가 날아감 - 스트림 : 서로 송수신이 가능한 상태 각 Host 간에 소켓이 연결되면, 각 Host에 입력 스트림과 출력 스트림이 생성 closesocket()은 둘 다 끊어버림 - Half-close #include int shutdown( SOCKET sock, // 종료할 소켓의 핸들 int howto // 종료 방법 ); // 성공 : 0, 실패 : SOCKET_ERROR > howto 인자 SD_RECEIVE : 입력 스트림 종료 (데이터 수신 불가) SD_SEND : 출력 스트림 종료 (데이터 송신 불가) SD_BOTH : 입출력 스트림 종료 - 출력 스트림을.. 2015. 5. 15. DLL에서 STL 사용시 문제 Warning 4251 > STL 컨테이너 정의에 _declspec(dllexport) 선언이 되어있지 않은 클래스템플릿을 export 할 경우 해결 방법 > vector만 사용시 템플릿을 인스턴트 화 시킨 후 사용 (vector는 워낙 많이 쓰는 거라 특별이 되도록 만들었기 때문) template class __declspec(dllexport) std::vector; > 그 이외엔 #pragma warning(disable : 4251) 출처 : http://mgun.tistory.com/508 2015. 5. 14. UDP 기반 서버 / 클라 - UDP는 TCP보다 간결한 구조 - ACK 응답 메시지 보내는 일 없으며 SEQ 처럼 패킷에 번호 붙이는 일도 없음 - TCP와의 차이는 흐름제어 - IP는 패킷이 호스트에서 호스트까지 전달 되도록 함 (Host to Host) - UDP는 패킷이 호스트내에 존재하는 UDP 소켓 중 하나에게 최종 전할 하는 역할 (Socket to Socket) - TCP가 UDP에 비해 느린 이유 1. 데이터 송수신 이전, 이후에 거치는 연결 설정 및 해제 과정 2. 데이터 송수신 과정에서 거치는 신뢰성 보장을 위한 흐름 제어 - UDP는 서버와 클라이언트가 연결 되어있지 않음 (listen()과 accept() 불필요) - UDP에서는 서버나 클라이언트나 소켓 하나만 있으면 됨 (TCP는 소켓과의 관계가 1:1,.. 2015. 5. 14. 이전 1 ··· 29 30 31 32 33 34 35 ··· 38 다음