asio7 boost::asio 비동기 TCP 서버 / 클라 예제 boost asio 안내서에 있는 기본 예제를 응용하여 작성했으며 컴파일러 옵션은 /Mtd 로 해야 합니다. 클라이언트 부분의 const string 은 내 IP 로 수정해줘야 합니다. 기존에 올렸던 내용은 소스 링크가 깨져서 다시 올립니다 (많은 분들이 보러 오셨는데 ㅠㅠ 깨져있었을 줄이야..) 소스는 퍼가실 때 소스 부분을 더블클릭하면 아랫쪽에 작은 창이 뜨면서 ctrl+c 로 전체 카피가 가능합니다 클라 소스#include "stdafx.h" #include #include #include #include const std::string _MY_IP("192.168.25.2 2012. 9. 3. boost::asio 비동기 서버/클라 step 1 boost asio 를 이용해서 비동기 서버 / 클라 만들어보기 정리해 봅시다~ Client -> Recv -> Recv Queue -> Worker Thread -> Send Queue -> Send Callback -> Client 분홍색 까지의 부분을 소스 예제로 봅시다! 어디까지나 예제 차원으로 (원래 asio 예제도 그렇고) class 내부에 막 때려넣었으니 따라하거나 이상한 코딩하는 사람으로 오해하지마세요 ^^; 소스 퍼가실 때 소스코드 부분을 더블 클릭해서 전체 선택 후 카피가 좋습니다 드래그 하면 한줄로 복사되요 컴파일 관련은 이전 글을 참고해 주세요 서버 예제 #include "stdafx.h" #include #include #include #include #include #includ.. 2011. 11. 9. BYTE (unsigned char) Stream 에 boost::pool 적용 이미 공개했던 BYTE Stream 이 워낙에 new delete 를 자주 호출 하는 관계로 메모리 단편화의 문제가 생길 수 있을 것 같아 (속도 차는 측정해본 결과 몇 개의 변수 추가로는 0.0015 ~ 6 정도로 차이는 없었음) 이 참에 겸사겸사 boost::pool 을 적용 보았습니다. 전 버전과 틀려진 점은 pool 에서 자동 소멸 기능이 지원되기 때문에 최종적 BYTE* 를 받을 때 스마트 포인터로 안받고 직접적으로 호출을 했다는 점 입니다. 가독성은 떨어지게 됐는데 전 버전과 비교해보면 알 수 있을 겁니다 참고 사이트 : http://www.boost.org/doc/libs/1_47_0/libs/pool/doc/interfaces.html 참고 예제 소스 - 클레스 #define _BUFF_S.. 2011. 11. 4. boost::asio::buffer http://think-async.com/Asio/boost_asio_1_3_1/doc/html/boost_asio/reference/buffer.html boost::asio::buffer 의 사용법이 잘 나와있는 레퍼런스 페이지 asio service 에서 쓰이는 read write 시 데이터 전송의 좋은 활용 예를 볼 수 있다 Buffers and Scatter-Gather I/O 의 예 char d1[128]; std::vector d2(128); boost::array d3; boost::array bufs1 = { boost::asio::buffer(d1), boost::asio::buffer(d2), boost::asio::buffer(d3) }; bytes_transferred = sock.. 2011. 10. 28. boost::asio 비동기 TCP + echo 서버 / 클라이언트 asio 라이브러리를 이용해 비동기 TCP 서버와 클라이언트를 만들어 봤습니다 예제에 있는거 그대로 이용을 했으니 뭐 특별할건 없고 컴파일 옵션에서 /Mtd 와 클라 소스에서 MY_IP 부분 수정이 필요합니다 # 소스 퍼가실 때 소스 부분을 더블클릭하면 선택 됩니다 드래그 하면 라인 정리가 안되니까 더블클릭으로 선택하고 카피하세요 # 소스에 대한 더 좋은 의견이나 개선사항은 비밀덧글로 주세요 ^^ # 소스 퍼가실 때 한마디 남겨주시면 힘이 됩니다 @_@ 서버 소스 #include "stdafx.h" #include #include #include #include #include #include #include #include #include #include #include #include #include.. 2011. 10. 27. boost::asio 쓰레드, 타이머, Strand 의 사용법 예제 asio io 를 쓰레드에 태워서 서버용 프로그램을 드래그 하더라도 멈추지 않게끔 된다 쓰레드에서 도는 두개의 타이머와 공유되는 변수를 통해 threadsafe 함을 보이고 strand 로 callback 을 관리하는 것을 볼 수 있다 예제 코드 #include "stdafx.h" #include #include #include class job { private: boost::asio::strand strand_; boost::asio::deadline_timer timer1_; boost::asio::deadline_timer timer2_; int co.. 2011. 10. 27. boost::asio boost 라이브러리의 한 사이드로 TCP, UDP 의 io 지원을 해준다. 한번쯤 보면 좋을 듯. 웹에서 찾다보면 흔히 볼 수 있는 asio 의 메뉴얼을 번역해놓은 문서다 메뉴얼에는 asio 를 쓰다보면 필히 접게하 되는 자주 쓰이는 스킬과 본격적인 소켓 사용의 방법이 나온다 - 동기/비동기적 타이머 사용 - 인자를 핸들러에 바인딩 - 맴버함수를 핸들러에 바인딩 - 멀티스레드 환경에서 핸들러 동기화 - 동기/비동기적인 TCP/UDP 서버의 예제 - 위 서버에 상응하는 클라이언트 예제 진자 필요한거만 잘도 추려놨다. 이게 뭐야? 하고 한번씩 실행시켜보고 지나갔다 나중에 본격적으로 쓸때 아.. 그게 있어야 되는구나.. 돌이켜보게 된다. 2011. 10. 27. 이전 1 다음