2016-09-28 3 views
0

Я делаю игру, в которой игрок может провести онлайн-сеанс. Я использую сетевую библиотеку SFML. Но я хочу показать IP-адрес хоста сервера, когда он ждет входящих соединений. Как я могу получить этот IP-адрес? Я ищу внутренний IP-адрес, но если можно получить внешний IP-адрес, это будет бонус.Получить IP-адрес хоста в SFML

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 Редко использовать 'recvfrom' в сокете TCP. Редко используются также простые функции C, когда класс 'TcpSocket' имеет функцию-член для приема данных. Наконец, это не удаленные соединения, на которые указывает OP, а на локальный сервер. –

ответ

0

если я не понял вашу проблему, вы ищете эти статические функции:

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

Документация here.

Смежные вопросы