2016-09-28 236 views
0

我正在製作一個遊戲,玩家可以主持在線會話。我正在使用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所需的移除連接地址,而是本地服務器的移除連接地址。 –

回答

0

除非我誤解你的問題,你看那些靜態函數:

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

文檔是here