-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathio-read-write-example.cpp
More file actions
67 lines (51 loc) · 1.47 KB
/
Copy pathio-read-write-example.cpp
File metadata and controls
67 lines (51 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include "asio.hpp"
#include <thread>
// asio::io_context 和异步操作:https://www.jianshu.com/p/d6ae8adb5914
std::vector<char> vbuf(20 * 1024);
void GrabSomeData(asio::ip::tcp::socket &socket)
{
socket.async_read_some(asio::buffer(vbuf.data(), vbuf.size()), [&socket](std::error_code ec, size_t length)
{
if(!ec){
std::cout << "Read: " << length << std::endl;
for (size_t i = 0; i < length; i++)
{
std::cout << vbuf[i];
}
GrabSomeData(socket);
} });
}
int main()
{
asio::error_code ec;
asio::io_context ctx;
asio::io_context::work idleWork(ctx);
std::thread ctxThread = std::thread([&ctx]()
{ ctx.run(); });
asio::ip::tcp::endpoint endpoint(asio::ip::make_address("51.38.81.49"), 80);
asio::ip::tcp::socket socket(ctx);
socket.connect(endpoint, ec);
if (!ec)
{
std::cout << "Connected!" << std::endl;
}
else
{
std::cout << "No Connec" << std::endl;
}
if (socket.is_open())
{
std::string req = "GET /index.html HTTP/1.1\r\n"
"Host: david-barr.co.uk\r\n"
"Connection: close\r\n\r\n";
socket.write_some(asio::buffer(req.data(), req.size()), ec);
GrabSomeData(socket);
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
ctx.stop();
if (ctxThread.joinable())
ctxThread.join();
}
std::cout << "Over" << std::endl;
return 0;
}