我试图让使用升压异步UDP客户端:: ASIO 我得到互联网上的一些代码,我设法发送消息的异步UDP客户端。 但我的客户端没有收到来自服务器的消息(并且它在我不使用增强功能时起作用)。使得使用boost :: ASIO
这里是我的代码
class udp_async_client
{
public:
udp_async_client (boost::asio::io_service& io_service, std::string& host, std:: string port, char **av , int ac)
: reply()
, _io_service (io_service)
, _sock (io_service, udp:: endpoint (udp:: v4(), 0)) {
udp:: resolver resolver (_io_service);
udp:: resolver:: query query (udp:: v4(), host, port);
udp:: resolver:: iterator endpoint_iterator = resolver.resolve (query);
sender_endpoint = *endpoint_iterator;
_io_service.run();
//test request string
using namespace std;
std::string request = av[3];
for (int i = 4 ; i < ac ; ++i)
{
request += ";";
request += av[i];
}
std:: cout <<"Request is:" <<request <<std:: endl;
_sock.async_send_to (boost:: asio:: buffer (request.c_str(), request.length())
, sender_endpoint
, boost:: bind (&udp_async_client::handle_send_to_server
, this, boost:: asio:: placeholders:: error
, endpoint_iterator));
}
~udp_async_client() {
_io_service.stop();
}
void handle_receive_from (const boost::system::error_code& error,
size_t bytes_recvd) {}
void handle_receive_from (const boost::system::error_code& error,
size_t bytes_recvd) {}
void handle_send_to_server (const boost::system::error_code& e,
udp:: resolver:: iterator endpoint_iterator) {
std:: cout <<"Handle send to" <<std:: endl;
char reply [max_length] = {};
_sock.async_receive_from (
boost:: asio:: buffer (reply, max_length), sender_endpoint,
boost:: bind (&udp_async_client::handle_receive_from, this,
boost:: asio:: placeholders:: error,
boost::asio::placeholders::bytes_transferred));
std:: cout <<"Reply is:" <<reply <<std:: endl;
}
private:
char reply [max_length];
boost::asio::io_service& _io_service;
udp:: socket _sock;
boost:: asio:: ip:: udp:: endpoint sender_endpoint;
};
和我的主:
int main (int ac, char** av) {
if (ac < 5) {
std:: cerr <<"Usage: nonblocking_udp_echo_client <host> <port> <name> <name to reach> \n";
return 1;
}
boost:: asio:: io_service io_service;
std:: string host (av[1]);
std:: string port (av[2]);
while (true)
{
udp_async_client cli (io_service, host, port, av , ac);
boost:: this_thread:: sleep (boost:: posix_time:: millisec (500));
}
return 0;
}
我不知道我做错了什么......
因为你有两个'handle_receive_from'函数,所以我很惊讶编译。更大的问题是,在'handle_send_to_server'中的回复中使用了局部变量作为缓冲区,'handle_send_to_server'返回后缓冲区不再有效。 –
有一个工作的异步UDP示例[here](http://www.boost.org/doc/libs/1_49_0/doc/html/booster_asio/tutorial/tutdaytime6.html)。 – Default
我从来没有传入handle_send_to_server。唯一显示的是“请求是[0123]” – kavaliero