Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从远程客户端获取ip地址:远程\u终结点:未连接传输终结点_C++_Sockets_Ip_Client_Boost Asio - Fatal编程技术网

C++ 从远程客户端获取ip地址:远程\u终结点:未连接传输终结点

C++ 从远程客户端获取ip地址:远程\u终结点:未连接传输终结点,c++,sockets,ip,client,boost-asio,C++,Sockets,Ip,Client,Boost Asio,有人知道如何从套接字获取远程客户端的ip地址吗 我尝试过这个功能: 我已尝试使用此功能: std::string s =socket.remote_endpoint().address().to_string(); 但是,即使我可以从客户机ping和向客户机ping,我也总是会遇到以下错误: 在抛出“boost::exception\u detail::clone\u impl>的实例后调用terminate what():远程_终结点:未连接传输终结点 ^[[AAbandon(堆芯倾

有人知道如何从套接字获取远程客户端的ip地址吗 我尝试过这个功能: 我已尝试使用此功能:

std::string s =socket.remote_endpoint().address().to_string();    
但是,即使我可以从客户机ping和向客户机ping,我也总是会遇到以下错误: 在抛出“boost::exception\u detail::clone\u impl>的实例后调用terminate what():远程_终结点:未连接传输终结点 ^[[AAbandon(堆芯倾倒)

有没有办法检索发送者的ip地址(ps:在发送数据之前想用它进行检查)

boost::asio::io_服务io_服务;
boost::asio::ip::udp::socket套接字(io_服务);
open(boost::asio::ip::udp::v4());
绑定(boost::asio::ip::udp::endpoint)(
boost::asio::ip::udp::v4(),port));
标准::cout

您的套接字
用于侦听的套接字
替换为您的套接字。

使用。当您获取数据时,请检查
发送方端点
,它将由发送方ip填充。此答案不使用OP使用的语言或任何库。它也没有解决围绕UDP的特殊注意事项,因为这是一个连接s协议,您确实需要其他规定来获取接收到数据报的对等地址。最后,您使用printf打印接受绑定到的地址(这不是发件人),而不管这不会导致端点以可用形式出现。@rafix07'注释的方法正确且早于此答案。
boost::asio::io_service io_service;
boost::asio::ip::udp::socket socket(io_service);
socket.open(boost::asio::ip::udp::v4());
socket.bind(boost::asio::ip::udp::endpoint(
boost::asio::ip::udp::v4(),port));

std::cout << "Ready to receive" << std::endl;

//information about where the packets come from
boost::asio::ip::udp::endpoint sender;
/////retrieve ip
std::string s =socket.remote_endpoint().address().to_string(); 
std::cout << "The client's ip is:" << s << std::endl;
struct sockaddr_in sAddr;
socklen_t sLen = sizeof sAddr;
[your socket] = accept([socket to listen], (struct sockaddr *) &sAddr, &sLen);

printf("%s",inet_ntoa(sAddr.sin_addr));