boost.asio를 이용한 네트워크 프로그래밍preview.hanbit.co.kr/2611/sample_ebook.pdf ·...
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.
() .
.
.
() .
-
, 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