Java 如何检查广播数据包是否从该机器发送?

Java 如何检查广播数据包是否从该机器发送?,java,networking,udp,Java,Networking,Udp,我正在使用libGDX用Java编写一个游戏。我想将局域网发现添加到游戏中,这样玩家只需按下按钮即可开始多人游戏。为了实现这一点,每个客户端将UDP数据包广播到特定端口(255.255.255.255:40667),并侦听此端口上的其他传入数据包,以创建网络上其他玩家的列表 这是完美的,但是机器广播的数据包也会被机器接收 例如: 如果网络上有两台计算机正在运行程序 机器1(192.168.1.137) 机器2(192.168.1.111) 然后,第一台机器从192.168.1.111和192.1

我正在使用
libGDX
用Java编写一个游戏。我想将局域网发现添加到游戏中,这样玩家只需按下按钮即可开始多人游戏。为了实现这一点,每个客户端将
UDP
数据包广播到特定端口(
255.255.255.255:40667
),并侦听此端口上的其他传入数据包,以创建网络上其他玩家的列表

这是完美的,但是机器广播的数据包也会被机器接收

例如:
如果网络上有两台计算机正在运行程序

机器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

如何确定数据包是否从同一台机器发送


谢谢

您的机器通常有多个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测试
例如,在你的应用程序中只需呼叫:

System.out.println(InetAddress.getByName("test").getHostAddress());

cmd中的命令
hostname
将返回主机名。

可能是重复的抱歉,我的坏,这是一个TCP套接字。你的意思是,我现在要尝试一下