【发布时间】:2016-09-28 20:08:29
【问题描述】:
我正在制作一个玩家可以主持在线会话的游戏。我正在使用 SFML 网络库。但是我想在等待传入连接时显示服务器主机的 IP 地址。我怎样才能得到这个IP地址?我正在寻找内部IP地址,但如果有可能获得外部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...
}
【问题讨论】:
-
据我了解,如果您没有为
listen函数指定接口,那么它将侦听 all 接口上的传入连接(即它绑定到INADDR_ANY)。因此,您无法从TcpListener类中获取任何特定接口的地址。相反,您必须使用您的平台网络功能来获取接口列表,然后猜测哪个是正确的,或者将它们全部列出。 -
使用 stl 方法,ip 地址就在 recvfrom() 函数中;)
-
@Charlie 很少有人在 TCP 套接字上使用
recvfrom。当TcpSocket类有一个成员函数来接收数据时,也很少使用普通的 C 函数。最后,这不是 OP 想要的删除连接地址,而是本地服务器的。 -
@JoachimPileborg 不要误会我的意思,我自己使用 SFML,我只是说 stl 方法有时可以更透明
标签: c++ network-programming sfml