我正在使用libGDX
用Java编写游戏。我想在游戏中添加局域网发现,因此玩家只需按一个按钮即可开始多人游戏。为此,每个客户端将UDP
个数据包广播到某个端口(255.255.255.255:40667
)并侦听此端口上的其他传入数据包,以创建网络上其他播放器的列表。
这很好用,但机器广播的数据包也会被它接收。
例如:
如果网络上有2台运行程序的计算机
机器1(192.168.1.137)
机器2(192.168.1.111)
然后第一台机器接收来自192.168.1.111
和来自192.168.1.137
的数据包
我试图找到一种方法来确定数据包是否来自我自己的地址,但我无法弄清楚。
InetAddress.getLocalHost()
返回127.0.1.1
,从出站套接字读取本地地址返回0.0 0.0
如何确定数据包是否是从同一台机器发送的?
由于
答案 0 :(得分:0)
您的计算机通常有多个IP地址,并且调用localhost通常会返回127.0.1.1
有几种选择如何确定本地IP地址,一种只是创建套接字连接:
// Here is the existing IP address in my local network, or you will get the exception
try (Socket socket = new Socket("192.168.0.1", 80)) {
System.out.println(socket.getLocalAddress().getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
您可以通过修改地址手动指定您的主机名:
C:\Windows\System32\drivers\etc\hosts
例如,添加10.10.10.1 test
并在您的应用中调用:
System.out.println(InetAddress.getByName("test").getHostAddress());
cmd中的命令hostname
将返回主机名。