Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to bind the local endpoint to a socket?
    primarykey
    data
    text
    <p>I have the following code where I'm trying to send a packet to a specific client by changing the endpoint of the socket manually and I'm not sure how to configure the socket to use the <code>async_write</code> function to send the packet. Lines 44-47 are used to try solving the problem within the boost async server example (modified).</p> <pre><code>#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;boost/bind.hpp&gt; #include &lt;boost/asio.hpp&gt; using boost::asio::ip::tcp; class session { public: session(boost::asio::io_service&amp; io_service) : socket_(io_service) { } tcp::socket&amp; socket() { return socket_; } void start() { std::cout&lt;&lt;"start(): "&lt;&lt;std::endl; socket_.async_read_some(boost::asio::buffer(data_, max_length), boost::bind(&amp;session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } void read_handler(const boost::system::error_code&amp; ec, std::size_t bytes_transferred); private: void handle_read(const boost::system::error_code&amp; error, size_t bytes_transferred) { std::cout&lt;&lt;"handle read: bytes_transferred"&lt;&lt;bytes_transferred&lt;&lt;std::endl; if (!error) { data_ = {'0','1','2','3','4','5','6','7','8','9'}; /*read_handler(error, bytes_transferred); boost::asio::async_write(socket_,boost::asio::buffer(data_, bytes_transferred), boost::bind(&amp;session::handle_write, this, boost::asio::placeholders::error));*/ boost::system::error_code ec; boost::asio::ip::tcp::endpoint endpoint = socket_.remote_endpoint(ec); std::cout&lt;&lt;"ip address: "&lt;&lt;endpoint.address()&lt;&lt;std::endl; std::cout&lt;&lt;"port: "&lt;&lt;endpoint.port()&lt;&lt;std::endl; //how to get the socket to send data to specific port, ip-address e.g. changing the ip-address and port by editing it? async_write(socket_, boost::asio::buffer(data_, max_length), boost::bind(&amp;session::writeHandler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else { delete this; } } void writeHandler(const boost::system::error_code&amp; errorCode, size_t bytesTransferred) { std::cout &lt;&lt; "DEBUG&gt; Transfered " &lt;&lt; bytesTransferred &lt;&lt; " bytes to " &lt;&lt; socket_.remote_endpoint().address().to_string() &lt;&lt; std::endl; } void handle_write(const boost::system::error_code&amp; error) { std::cout&lt;&lt;"handle write: "&lt;&lt;std::endl; if (!error) { std::cout&lt;&lt;"before: "&lt;&lt;data_&lt;&lt;std::endl; socket_.async_read_some(boost::asio::buffer(data_, max_length), boost::bind(&amp;session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); std::cout&lt;&lt;"after: "&lt;&lt;data_&lt;&lt;std::endl; } else { delete this; } } tcp::socket socket_; enum { max_length = 1024 }; char data_[max_length]; }; void session::read_handler(const boost::system::error_code&amp; ec, std::size_t bytes_transferred) { std::cout&lt;&lt;bytes_transferred&lt;&lt;std::endl; } class server { public: server(boost::asio::io_service&amp; io_service, short port) : io_service_(io_service), acceptor_(io_service, tcp::endpoint(tcp::v4(), port)) { start_accept(); } private: void start_accept() { session* new_session = new session(io_service_); acceptor_.async_accept(new_session-&gt;socket(), boost::bind(&amp;server::handle_accept, this, new_session, boost::asio::placeholders::error)); } void handle_accept(session* new_session, const boost::system::error_code&amp; error) { if (!error) { new_session-&gt;start(); } else { delete new_session; } start_accept(); } boost::asio::io_service&amp; io_service_; tcp::acceptor acceptor_; }; int main() { try { boost::asio::io_service io_service; server s(io_service, 4000); io_service.run(); } catch (std::exception&amp; e) { std::cerr &lt;&lt; "Exception: " &lt;&lt; e.what() &lt;&lt; "\n"; } return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload