boost.asio를 이용한 네트워크 프로그래밍preview.hanbit.co.kr/2611/sample_ebook.pdf ·...

Download Boost.Asio를 이용한 네트워크 프로그래밍preview.hanbit.co.kr/2611/sample_ebook.pdf · Boost.Asio를 이용한 네트워크 프로그래밍 초판발행 2013년 6월 4

If you can't read please download the document

Upload: vukhuong

Post on 07-Feb-2018

307 views

Category:

Documents


19 download

TRANSCRIPT

  • Boost.Asio

    Hanbit eBook

    Realtime 27

  • Boost.Asio

  • _

    2003 , MMORPG

    .

    C++ , C# . C++11

    Linux , .NET , JavaScript

    .

    .

    , .

    .

    Boost.Asio

    2013 6 4

    /

    () / 7 83 () IT

    02-325-5544 / 02-336-7124

    1999 6 24 10-1779

    ISBN 978-89-6848-611-1 15000 / 9,900

    / /

    , [],

    , ,

    () .

    www.hanb.co.kr / [email protected]

    Published by HANBIT Media, Inc. Printed in Korea

    Copyright 2013 & HANBIT Media, Inc.

    () .

    .

    .

    ([email protected]) .

    () .

  • , IOCP

    BSD Socket (Windows )

    .

    IOCP

    IO .

    Windows ,

    (, Linux)

    ( ).

    , IOCP

    .

    , OS

    Linux . Linux IOCP

    .

    C++

    Boost Asio . Asio

    IO ,

    . , Boost Windows

    Linux .

    C++ Boost ,

    . Boost

    , Asio .

    Asio

  • .

    .

    , Asio

    .

    . ,

    .

    , , ,

    , .

    , ,

    .

  • Technical Reviewer

    Kingdom under fire 2 online team

    . IT ,

    .

    nhn next

    .

    NCsoft Lineage Eternal

    .

    Beta Reader

    , , ,

  • C++ BSD Socket

    ,

    IO

    .

    , Boost.Asio

    ,

    , IOCP IO

    .

    Asio

    , .

    Asio .

    ,

    .

    .

    .

    http://www.hanb.co.kr/exam/2611

    http://www.hanb.co.kr/exam/2611

  • eBook

    eBook IT eBook.

    IT .

    .

    .

    ?

    ? .

    .

    .

    , .

    1. eBook Only - IT .

    500 () ,

    100 .

    ,

    , ,

    .

    O'Reilly .

    2. , .

    .

    .

    ()

    .

  • 3. DRM-Free .

    IT DRM-Free PDF

    .

    .

    4. .

    ,

    .

    ,

    .

    .

    .

    .

    .

    .

    , , .

    , .

    ,

    .

  • 0 1 Boost 1

    1.1 Boost 2

    1.2 3

    0 2 Boost.Asio 5

    2.1 5

    2.2 6

    2.3 7

    2.4 8

    0 3 Echo , 11

    3.1 Boost.Asio 11

    3.2 I/OTCP/IPEcho 12

    3.3 I/OTCP/IPEcho 18

    3.4 Boost.AsioAPI 24

    0 4 I/O Echo , 34

    4.1 I/O 34

    4.2 I/OTCP/IPEcho 36

    4.3 TCP/IPEcho 49

    4.4 Boost.AsioAPI 57

  • 0 5 61

    5.1 61

    5.2 70

    5.3 76

    0 6 I/O UDP Echo , 78

    6.1 UDP 78

    6.2 Boost.AsioAPI 80

    0 7 Boost.Asio Timer 82

    7.1 82

    7.2 85

    7.3 87

    0 8 Boost.Asio 93

    0 9 Boost.Asio 100

    9.1 Boost.Asio 101

    9.2 Windows 112

    9.3 resolverIP 114

    1 0 119

  • 11 Boost

    1 | Boost

    Boost ? , C++

    . Boost

    ,

    C++ .

    Boost C++ C++

    , C++ (C++ )

    . Boost .

    1-1Boost(www.boost.org)

    Boost

    . Boost ,

    . Boost

    www.boost.org

  • 21 Boost

    . !

    2011 8 C++11 Boost

    . Visual Studio( VS) 2008 SP

    tr1 Boost .

    C++11 VC , Boost

    C++ .

    Boost.Asio , Boost

    .

    1.1 Boost

    Boost Boost BoostPro

    .

    Boost : http://www.boost.org/users/history/version_1_

    52_0.html

    BoostPro : http://www.boostpro.com/download/

    Boost OSOperating System,

    (thread, filesystem ) . VS BoostPro

    , lib dll (VS 2003 ~ VS 2010

    , (32 64 ) BoostPro

    ).

    BoostPro Boost

    . Windows

    http://www.boost.org/users/history/version_1_52_0.htmlhttp://www.boost.org/users/history/version_1_52_0.htmlhttp://www.boostpro.com/download/

  • 31 Boost

    , VS 01(VS

    2012 ).

    Boost

    . Boost

    , Boost

    .

    (

    Boost

    ).

    Boost : http://jacking.tistory.com/986

    1.2

    ,

    Windows .

    . iOS

    Android () Windows .

    Boost . Boost

    Windows Linux OS, iOS, Android

    .

    , Boost

    .

    0120132,BoostPro.

    1.5.2.

    http://jacking.tistory.com/986

  • 41 Boost

    iOS Android Boost ,

    boost ios boost android .

    (Boost iOS, android

    ).

    Boost . ,

    .

  • 52 Boost.Asio

    2 | Boost.Asio

    Boost.Asio Boost ,

    . Boost.Asio

    . Boost.Asio

    .

    .

    Asynchronous I/O( ) ,

    I/O .

    , , .

    .

    2.1

    , Boost.Asio

    . Boost.Asio API

    .

    Boost.Asio OS

    (Asynchronous I/O) . Boost.Asio

    . Boost.

    Asio 2-1 .

  • 62 Boost.Asio

    2-1Boost.AsioAPI

    Boost.Asio

    Linux Kernel 2.4 select . FD_SIZE

    Linux Kernel 2.6 epoll

    FreeBSD Kqueue

    Mac OS X Kqueue

    Solaris /dev/poll

    Windows 2000 Ovelapped I/O IOCP

    _ (Asynchronous I/O)

    blocking, non-blocking, syncronous, asyncronous

    http://devsw.tistory.com/142

    I/O Boost

    https://www.ibm.com/developerworks/linux/library/l-async/

    2.2

    .

    ,

    Boost.Asio .

    Boost.Asio . IT

    C++ Boost.Asio ,

    .

    P2P MMORPG Boost.Asio . Boost.Asio

    . .

    http://devsw.tistory.com/142https://www.ibm.com/developerworks/linux/library/l-async/

  • 72 Boost.Asio

    Boost.Asio ,

    . C++11 C++

    STL .

    , Boost.Asio

    . .01

    2.3

    PC ,

    .

    , ,

    . Boost.Asio

    2-1 .

    2-1

    01Boost1.4Asio.

  • 82 Boost.Asio

    , OS

    , (A) F1 .

    Boost.Asio OS (A)

    (C) .

    (A) . F1

    ? .

    (B) .

    , Boost.Asio

    (

    , ).

    2.4

    (

    ).

    2-2

  • 92 Boost.Asio

    , (a)

    . (a) ,

    . , (a) .

    (b) ,

    .

    (c) (a) (b)

    . (c) ,

    .

    (a)

    , (b) , (c)

    Boost.Asio .

    Boost.Asio

    , ,

    .

    , Boost Asio

    .

    . Boost.

    Asio .

    .

  • 102 Boost.Asio

    Boost.Asio Boost Boost

    . Boost , Asio

    .

    Asio C++ library : http://think-async.com/Asio

    http://think-async.com/Asio

  • 113 Echo ,

    3 | Echo ,

    Boost.Asio

    . OS API(Windows Linux Socket API)

    , Boost.Asio

    .

    Boost.Asio ,

    .

    Boost.Asio .

    3.1 Boost.Asio

    Boost.Asio , Boost (1.1 Boost

    ) Boost.Asio lib . lib

    , Boost.Asio

    .

    #include

    Boost.Asio . .

    ? , lib Boost.

    Asio .

    Boost.Asio , I/O

    TCP Echo .

  • 123 Echo ,

    3.2 I/O TCP/IP Echo

    3-1 TCP/IP

    ,

    Echo 01.

    3-1SynchronousTCPServer

    #include

    // 'SDKDDKVer.h' VS 2012

    // . .

    #include

    #include

    const char SERVER_IP[] = "127.0.0.1";

    const unsigned short PORT_NUMBER = 31400;

    int main()

    {

    boost::asio::io_service io_service;

    boost::asio::ip::tcp::endpoint endpoint( boost::asio::ip::tcp::v4(),

    PORT_NUMBER );

    boost::asio::ip::tcp::acceptor acceptor( io_service, endpoint );

    boost::asio::ip::tcp::socket socket(io_service);

    acceptor.accept(socket);

    std::cout

  • 133 Echo ,

    {

    std::array buf;

    buf.assign(0);

    boost::system::error_code error;

    size_t len = socket.read_some(boost::asio::buffer(buf), error);

    if( error )

    {

    if( error == boost::asio::error::eof )

    {

    std::cout

  • 143 Echo ,

    3-1 .

    , .

    Boost.Asio

    , (

    2 3

    . ,

    ).

    3.2.1

    boost::asio::io_service io_service;

    boost::asio::io_service Boost.Asio . io_service

    I/O 02 , io_service

    , , ,

    . Boost.Asio socket

    io_service .

    02.

  • 153 Echo ,

    3-1io_service

    io_service(Boost.Asio)

    connectacceptsendreceive

    OS

    boost::asio::ip::tcp::endpoint endpoint( boost::asio::ip::tcp::v4(),

    PORT_NUMBER );

    boost::asio::ip::tcp::acceptor acceptor( io_service, endpoint )

    endpoint ( ).

    endpoint , IP (IPv4 IPv6)

    . IPv4 .

    acceptor , io_service

    endpoint .

    3.2.2

    boost::asio::ip::tcp::socket socket(io_service);

    acceptor.accept(socket);

  • 163 Echo ,

    3-1 TCP/IP

    tcp::socket . socket

    io_service .

    acceptor accept socket

    . 03

    , accept

    .

    3.2.3

    std::array buf;

    buf.assign(0);

    (std::array buf;).

    3-1 char STL array .

    array char .

    boost::system::error_code error;

    error_code wrapping04

    , .

    size_t len = socket.read_some(boost::asio::buffer(buf), error);

    socket read_some

    . error_code

    . 3-1

    03..

    04.

  • 173 Echo ,

    .

    error_

    code . read_some

    , error_code (boost::asio::error::eof)

    . ,

    .

    if( error )

    {

    if( error == boost::asio::error::eof )

    {

    std::cout

  • 183 Echo ,

    3.2.4

    char szMessage[128] = {0,};

    sprintf_s( szMessage, 128-1, "Re:%s", &buf[0] );

    int nMsgLen = strnlen_s( szMessage, 128-1 );

    boost::system::error_code ignored_error;

    socket.write_some(boost::asio::buffer(szMessage, nMsgLen),

    ignored_error);

    3.2.3 std::array ,

    char . Boost.Asio C++ STL

    std::vector std::string .

    socket write_some .

    buffer error_code . ,

    buffer buffer , szMessage

    .

    Echo . Windows Linux OS API

    . , 3-1

    Windows Linux Mac OS

    .

    Winsock API 3-1

    http://blog.naver.com/liccorob/10155384326

    3.3 I/O TCP/IP Echo

    (Asio /

    http://blog.naver.com/liccorob/10155384326

  • 193 Echo ,

    ) 3-1

    , 3-2 .

    3-2SynchronousTCPClient

    #include

    #include

    #include

    const char SERVER_IP[] = "127.0.0.1";

    const unsigned short PORT_NUMBER = 31400;

    int main()

    {

    boost::asio::io_service io_service;

    boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::

    from_string(SERVER_IP), PORT_NUMBER);

    boost::system::error_code connect_error;

    boost::asio::ip::tcp::socket socket(io_service);

    socket.connect(endpoint, connect_error);

    if (connect_error)

    {

    std::cout

  • 203 Echo ,

    std::cout

  • 213 Echo ,

    std::cout