Boost::Asio notify the server when message arrival in async mode
I am using the Boost::asio, I set up a server and client, when the server accept the socket, the client may send message not immediately, I hope the server will be blocked to wait the message arrival , I know that read
may copy the info, but I just want to be notified only, and I will copy to specific object later.
so could anyone told me how to be notified when message comes from client, or is there anything unreasonable in my code,please correct me and show the standard implementation of this kind of server,thanks a lot!
typedef boost::shared_ptr<tcp::socket> Ptr_socket;
void handle_accept(Ptr_socket sock, const boost::system::error_code &err);
boost::asio::io_context context;
tcp::endpoint ep(tcp::v4(), 2001);
tcp::acceptor acceptor(context, ep);
void start_accept(Ptr_socket sock) {
acceptor.async_accept(*sock, boost::bind(handle_accept, sock, _1));
}
char buffer_[1000];
void read(Ptr_socket sock)
{
sock->async_read_some(boost::asio::buffer(buffer_),
[sock](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
cout << buffer_[0] << "succeed receive n";
read(sock);
}
else
{
cout << ec;
}
});
}
void handle_accept(Ptr_socket sock, const boost::system::error_code &err) {
if (err) return;
printf("succeed connectn");
read(sock);
}
Ptr_socket wait()
{
Ptr_socket p_sock(new tcp::socket(context));
start_accept(p_sock);
context.run(); //a kind of thread.join();
return p_sock;
}
int main() {
auto p=wait();
context.run();
return 0;
}
c++ boost boost-asio tcp-ip
add a comment |
I am using the Boost::asio, I set up a server and client, when the server accept the socket, the client may send message not immediately, I hope the server will be blocked to wait the message arrival , I know that read
may copy the info, but I just want to be notified only, and I will copy to specific object later.
so could anyone told me how to be notified when message comes from client, or is there anything unreasonable in my code,please correct me and show the standard implementation of this kind of server,thanks a lot!
typedef boost::shared_ptr<tcp::socket> Ptr_socket;
void handle_accept(Ptr_socket sock, const boost::system::error_code &err);
boost::asio::io_context context;
tcp::endpoint ep(tcp::v4(), 2001);
tcp::acceptor acceptor(context, ep);
void start_accept(Ptr_socket sock) {
acceptor.async_accept(*sock, boost::bind(handle_accept, sock, _1));
}
char buffer_[1000];
void read(Ptr_socket sock)
{
sock->async_read_some(boost::asio::buffer(buffer_),
[sock](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
cout << buffer_[0] << "succeed receive n";
read(sock);
}
else
{
cout << ec;
}
});
}
void handle_accept(Ptr_socket sock, const boost::system::error_code &err) {
if (err) return;
printf("succeed connectn");
read(sock);
}
Ptr_socket wait()
{
Ptr_socket p_sock(new tcp::socket(context));
start_accept(p_sock);
context.run(); //a kind of thread.join();
return p_sock;
}
int main() {
auto p=wait();
context.run();
return 0;
}
c++ boost boost-asio tcp-ip
1
I recommend that you check out theboost::asio
examples. The async_tcp_echo_server would be a good starting point.
– kenba
Nov 20 '18 at 11:28
add a comment |
I am using the Boost::asio, I set up a server and client, when the server accept the socket, the client may send message not immediately, I hope the server will be blocked to wait the message arrival , I know that read
may copy the info, but I just want to be notified only, and I will copy to specific object later.
so could anyone told me how to be notified when message comes from client, or is there anything unreasonable in my code,please correct me and show the standard implementation of this kind of server,thanks a lot!
typedef boost::shared_ptr<tcp::socket> Ptr_socket;
void handle_accept(Ptr_socket sock, const boost::system::error_code &err);
boost::asio::io_context context;
tcp::endpoint ep(tcp::v4(), 2001);
tcp::acceptor acceptor(context, ep);
void start_accept(Ptr_socket sock) {
acceptor.async_accept(*sock, boost::bind(handle_accept, sock, _1));
}
char buffer_[1000];
void read(Ptr_socket sock)
{
sock->async_read_some(boost::asio::buffer(buffer_),
[sock](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
cout << buffer_[0] << "succeed receive n";
read(sock);
}
else
{
cout << ec;
}
});
}
void handle_accept(Ptr_socket sock, const boost::system::error_code &err) {
if (err) return;
printf("succeed connectn");
read(sock);
}
Ptr_socket wait()
{
Ptr_socket p_sock(new tcp::socket(context));
start_accept(p_sock);
context.run(); //a kind of thread.join();
return p_sock;
}
int main() {
auto p=wait();
context.run();
return 0;
}
c++ boost boost-asio tcp-ip
I am using the Boost::asio, I set up a server and client, when the server accept the socket, the client may send message not immediately, I hope the server will be blocked to wait the message arrival , I know that read
may copy the info, but I just want to be notified only, and I will copy to specific object later.
so could anyone told me how to be notified when message comes from client, or is there anything unreasonable in my code,please correct me and show the standard implementation of this kind of server,thanks a lot!
typedef boost::shared_ptr<tcp::socket> Ptr_socket;
void handle_accept(Ptr_socket sock, const boost::system::error_code &err);
boost::asio::io_context context;
tcp::endpoint ep(tcp::v4(), 2001);
tcp::acceptor acceptor(context, ep);
void start_accept(Ptr_socket sock) {
acceptor.async_accept(*sock, boost::bind(handle_accept, sock, _1));
}
char buffer_[1000];
void read(Ptr_socket sock)
{
sock->async_read_some(boost::asio::buffer(buffer_),
[sock](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
cout << buffer_[0] << "succeed receive n";
read(sock);
}
else
{
cout << ec;
}
});
}
void handle_accept(Ptr_socket sock, const boost::system::error_code &err) {
if (err) return;
printf("succeed connectn");
read(sock);
}
Ptr_socket wait()
{
Ptr_socket p_sock(new tcp::socket(context));
start_accept(p_sock);
context.run(); //a kind of thread.join();
return p_sock;
}
int main() {
auto p=wait();
context.run();
return 0;
}
c++ boost boost-asio tcp-ip
c++ boost boost-asio tcp-ip
asked Nov 20 '18 at 10:53
Gordon
776
776
1
I recommend that you check out theboost::asio
examples. The async_tcp_echo_server would be a good starting point.
– kenba
Nov 20 '18 at 11:28
add a comment |
1
I recommend that you check out theboost::asio
examples. The async_tcp_echo_server would be a good starting point.
– kenba
Nov 20 '18 at 11:28
1
1
I recommend that you check out the
boost::asio
examples. The async_tcp_echo_server would be a good starting point.– kenba
Nov 20 '18 at 11:28
I recommend that you check out the
boost::asio
examples. The async_tcp_echo_server would be a good starting point.– kenba
Nov 20 '18 at 11:28
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391420%2fboostasio-notify-the-server-when-message-arrival-in-async-mode%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391420%2fboostasio-notify-the-server-when-message-arrival-in-async-mode%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
I recommend that you check out the
boost::asio
examples. The async_tcp_echo_server would be a good starting point.– kenba
Nov 20 '18 at 11:28