src/​examples/​cpp03/​echo/​blocking_udp_echo_cli​ent.​cppsrc/​examples/​cpp11/​echo/​blocking_udp_echo_cli​ent.​cpp
⋮⋮
1 /​/​1 /​/​
2 /​/​·​blocking_udp_echo_cli​ent.​cpp2 /​/​·​blocking_udp_echo_cli​ent.​cpp
3 /​/​·​~~~~~~~~~~~~~~~~~~~~~​~~~~~~~3 /​/​·​~~~~~~~~~~~~~~~~~~~~~​~~~~~~~
4 /​/​4 /​/​
5 /​/​·​Copyright·​(c)​·​2003-​2022·​Christopher·​M.​·​Kohlhoff·​(chris·​at·​kohlhoff·​dot·​com)​5 /​/​·​Copyright·​(c)​·​2003-​2022·​Christopher·​M.​·​Kohlhoff·​(chris·​at·​kohlhoff·​dot·​com)​
6 /​/​6 /​/​
7 /​/​·​Distributed·​under·​the·​Boost·​Software·​License,​·​Version·​1.​0.​·​(See·​accompanying7 /​/​·​Distributed·​under·​the·​Boost·​Software·​License,​·​Version·​1.​0.​·​(See·​accompanying
8 /​/​·​file·​LICENSE_1_0.​txt·​or·​copy·​at·​http:​/​/​www.​boost.​org/​LICENSE_1_0.​txt)​8 /​/​·​file·​LICENSE_1_0.​txt·​or·​copy·​at·​http:​/​/​www.​boost.​org/​LICENSE_1_0.​txt)​
9 /​/​9 /​/​
10 10
11 #include·​<cstdlib>11 #include·​<cstdlib>
12 #include·​<cstring>12 #include·​<cstring>
13 #include·​<iostream>13 #include·​<iostream>
14 #include·​"asio.​hpp"14 #include·​"asio.​hpp"
15 15
16 using·​asio:​:​ip:​:​udp;​16 using·​asio:​:​ip:​:​udp;​
17 17
18 enum·​{·​max_length·​=·​1024·​};​18 enum·​{·​max_length·​=·​1024·​};​
19 19
20 int·​main(int·​argc,​·​char*·​argv[])​20 int·​main(int·​argc,​·​char*·​argv[])​
21 {21 {
22 ·​·​try22 ·​·​try
23 ·​·​{23 ·​·​{
24 ·​·​·​·​if·​(argc·​!=·​3)​24 ·​·​·​·​if·​(argc·​!=·​3)​
25 ·​·​·​·​{25 ·​·​·​·​{
26 ·​·​·​·​·​·​std:​:​cerr·​<<·​"Usage:​·​blocking_udp_echo_cli​ent·​<host>·​<port>\n";​26 ·​·​·​·​·​·​std:​:​cerr·​<<·​"Usage:​·​blocking_udp_echo_cli​ent·​<host>·​<port>\n";​
27 ·​·​·​·​·​·​return·​1;​27 ·​·​·​·​·​·​return·​1;​
28 ·​·​·​·​}28 ·​·​·​·​}
29 29
30 ·​·​·​·​asio:​:​io_context·​io_context;​30 ·​·​·​·​asio:​:​io_context·​io_context;​
31 31
32 ·​·​·​·​udp:​:​socket·​s(io_context,​·​udp:​:​endpoint(udp:​:​v4()​,​·​0)​)​;​32 ·​·​·​·​udp:​:​socket·​s(io_context,​·​udp:​:​endpoint(udp:​:​v4()​,​·​0)​)​;​
33 33
34 ·​·​·​·​udp:​:​resolver·​resolver(io_context)​;​34 ·​·​·​·​udp:​:​resolver·​resolver(io_context)​;​
35 ·​·​·​·​udp:​:​resolver:​:​results_type·​endpoints·​=35 ·​·​·​·​udp:​:​resolver:​:​results_type·​endpoints·​=
36 ·​·​·​·​·​·​resolver.​resolve(udp:​:​v4()​,​·​argv[1],​·​argv[2])​;​36 ·​·​·​·​·​·​resolver.​resolve(udp:​:​v4()​,​·​argv[1],​·​argv[2])​;​
37 37
38 ·​·​·​·​using·​namespace·​std;​·​/​/​·​For·​strlen.​
39 ·​·​·​·​std:​:​cout·​<<·​"Enter·​message:​·​";​38 ·​·​·​·​std:​:​cout·​<<·​"Enter·​message:​·​";​
40 ·​·​·​·​char·​request[max_length];​39 ·​·​·​·​char·​request[max_length];​
41 ·​·​·​·​std:​:​cin.​getline(request,​·​max_length)​;​40 ·​·​·​·​std:​:​cin.​getline(request,​·​max_length)​;​
42 ·​·​·​·​size_t·​request_length·​=·​strlen(request)​;​41 ·​·​·​·​size_t·​request_length·​=·​std:​:​strlen(request)​;​
43 ·​·​·​·​s.​send_to(asio:​:​buffer(request,​·​request_length)​,​·​*endpoints.​begin()​)​;​42 ·​·​·​·​s.​send_to(asio:​:​buffer(request,​·​request_length)​,​·​*endpoints.​begin()​)​;​
44 43
45 ·​·​·​·​char·​reply[max_length];​44 ·​·​·​·​char·​reply[max_length];​
46 ·​·​·​·​udp:​:​endpoint·​sender_endpoint;​45 ·​·​·​·​udp:​:​endpoint·​sender_endpoint;​
47 ·​·​·​·​size_t·​reply_length·​=·​s.​receive_from(46 ·​·​·​·​size_t·​reply_length·​=·​s.​receive_from(
48 ·​·​·​·​·​·​·​·​asio:​:​buffer(reply,​·​max_length)​,​·​sender_endpoint)​;​47 ·​·​·​·​·​·​·​·​asio:​:​buffer(reply,​·​max_length)​,​·​sender_endpoint)​;​
49 ·​·​·​·​std:​:​cout·​<<·​"Reply·​is:​·​";​48 ·​·​·​·​std:​:​cout·​<<·​"Reply·​is:​·​";​
50 ·​·​·​·​std:​:​cout.​write(reply,​·​reply_length)​;​49 ·​·​·​·​std:​:​cout.​write(reply,​·​reply_length)​;​
51 ·​·​·​·​std:​:​cout·​<<·​"\n";​50 ·​·​·​·​std:​:​cout·​<<·​"\n";​
52 ·​·​}51 ·​·​}
53 ·​·​catch·​(std:​:​exception&·​e)​52 ·​·​catch·​(std:​:​exception&·​e)​
54 ·​·​{53 ·​·​{
55 ·​·​·​·​std:​:​cerr·​<<·​"Exception:​·​"·​<<·​e.​what()​·​<<·​"\n";​54 ·​·​·​·​std:​:​cerr·​<<·​"Exception:​·​"·​<<·​e.​what()​·​<<·​"\n";​
56 ·​·​}55 ·​·​}
57 56
58 ·​·​return·​0;​57 ·​·​return·​0;​
59 }58 }