使用boost :: asio打孔

时间:2012-06-18 08:31:36

标签: c++ udp client-server hole-punching

我尝试使用打孔protocole制作服务器客户端。 所以我发送到我的服务器我的客户端IP和客户端端口, 当连接第二个用户时,服务器向客户端发送Ip和另一个客户端的端口。 所以,当我有这个时,我试图在我的两个客户端之间建立连接,并且我在使用boost :: asio

时出错
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'

what():找不到服务 中止

这是我的代码

std::vector<std::string> response;

response = split(reply, ':');
std::cout << "name : " << response[0] << std::endl;
std::cout << "adresse : " << response[1] << std::endl;
std::cout << "port : " << response[2] << std::endl;

udp::resolver::query query(udp::v4(), response[0], response[1]);

std::cout << "resolved - - -  -" << std::endl;

struct client *cl = new struct client();

cl->endpoint_iterator = resolver.resolve(query);
// It Crash HERE

cl->sender_endpoint = *endpoint_iterator;
cl->name = response[0];
_clients.push_back(cl);

1 个答案:

答案 0 :(得分:1)

检查查询的参数。

您正在打印响应[1]作为主机地址和响应[2]作为端口。但是您构建的查询对象的响应[0]作为主机地址,响应[1]作为端口/服务。

我怀疑“服务未找到中止”是指您的主机名看起来不像端口号或服务名称。

请参阅http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/reference/ip__basic_resolver_query/basic_resolver_query/overload4.html