获取SFML中的主机IP地址

问题描述:

我正在制作一个游戏,玩家可以主持在线会话。我正在使用SFML网络库。但是我想在等待传入连接时显示服务器主机的IP地址。我怎样才能得到这个IP地址?我正在寻找内部IP地址,但如果可以获得外部IP地址,这将是一项奖励。获取SFML中的主机IP地址

sf::TcpListener listener; 

// bind the listener to a port 
if (listener.listen(53000) != sf::Socket::Done) 
{ 
    // error... 
} 

// accept a new connection 
sf::TcpSocket client; 
if (listener.accept(client) != sf::Socket::Done) 
{ 
    // error... 
} 
+0

据我所知,如果您没有指定['listen'](http://www.sfml-dev.org/documentation/2.4.0/classsf_1_1TcpListener.php#a9504758ea3570e62cb20b209c11776a1)函数的接口,那么它将监听* all *接口上的传入连接(即它绑定到INADDR_ANY)。因此你不能从'TcpListener'类获得任何特定接口的地址。相反,您必须使用平台网络功能来获取接口列表,并且猜测哪一个是正确的,或者仅列出所有接口。 –

+0

与STL的方法,IP地址就在那里在recvfrom()函数;) – Charlie

+1

@Charlie一个很少使用TCP套接字'recvfrom'。当'TcpSocket'类具有接收数据的成员函数时,也很少使用纯C函数。最后,它不是OP所需的移除连接地址,而是本地服务器的移除连接地址。 –

除非我误解你的问题,你看那些静态函数:

sf::IpAddress sf::IpAddress::getLocalAddress(); 
sf::IpAddress sf::IpAddress::getPublicAddress(Time timeout); 

文档是here