Created
October 28, 2015 13:17
-
-
Save jen6/84cf1f2c23d4dcdeb699 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void client::connect(const boost::system::error_code& error) | |
{ | |
boost::system::error_code ec; | |
boost::asio::socket_base::keep_alive option(true); | |
//혹시 타임아웃 때문에 그런가 하고 넣어줬습니다 | |
_socket.set_option(option, ec); | |
if (ec) { | |
std::cerr << ec.value() << std::endl; | |
exit(0); | |
} | |
if (!error) { | |
_socket.async_read_some( | |
boost::asio::buffer(recv_buf.get()->data(), Packet::MAX_LEN), | |
boost::bind(&client::read, | |
this, | |
asio::placeholders::error) | |
); | |
} | |
} | |
void client::handle_send(const boost::system::error_code & error) { | |
_socket.async_read_some( | |
boost::asio::buffer(recv_buf.get()->data(), Packet::MAX_LEN), | |
boost::bind(&client::read, | |
this, | |
asio::placeholders::error) | |
); | |
} | |
} | |
void client::send(Packet::packet_ptr& p) | |
{ | |
_socket.async_write_some( | |
boost::asio::buffer(p.get()->data(), p.get()->length()), | |
boost::bind(&client:: handle_send, | |
this, | |
asio::placeholders::error) | |
); | |
} | |
void client::read(const boost::system::error_code & error) | |
{ | |
_socket.async_read_some( | |
boost::asio::buffer(recv_buf.get()->data(), Packet::MAX_LEN), | |
boost::bind(&client::handle_read, | |
this, | |
recv_buf, | |
asio::placeholders::bytes_transferred, | |
asio::placeholders::error) | |
); | |
} | |
void client::handle_read(Packet::packet_ptr p, size_t byte_transfer, const boost::system::error_code & error) | |
{ | |
if (!error) | |
{ | |
Packet::Parse(p); | |
} | |
_socket.async_read_some( | |
boost::asio::buffer(recv_buf.get()->data(), Packet::MAX_LEN), | |
boost::bind(&client::read, | |
this, | |
asio::placeholders::error) | |
); | |
}; | |
client::client(boost::asio::io_service& io_service, tcp::resolver::iterator endpoint_iterator) | |
: _io_service(io_service), _socket(io_service), recv_buf(new Packet::Packet) | |
{ | |
boost::asio::async_connect(_socket, endpoint_iterator, | |
boost::bind(&client::connect, | |
this, boost::asio::placeholders::error) | |
); | |
} | |
---------------------------------------------------------------------------------------------------------------------- | |
int main() | |
{ | |
boost::asio::io_service io; | |
boost::asio::io_service::work work(io); //send한 후 io_service자체가 죽는것 같아 넣어줬습니다 | |
tcp::resolver resolver(io); | |
auto endpoint_iterator = resolver.resolve({ "127.0.0.1","999" }); | |
std::thread t1(boost::bind(&boost::asio::io_service::run, &io)); | |
client c(io, endpoint_iterator); | |
std::random_device rd; | |
//test case 30 | |
for (auto i = 0; i < 30; ++i) | |
{ | |
Packet::test t; | |
unsigned int buf = rd(); | |
t.t = buf; | |
std::cout << buf << std::endl; | |
auto p = t.Make_packet(); | |
if (!p) { | |
std::cout << "packet error" << std::endl; | |
break; | |
} | |
c.send(p); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
코드자르다 thread join거는 부분이 잘렸네요
io_service run 해둔 쓰레드는 join걸어뒀습니다