【发布时间】:2012-01-31 06:36:42
【问题描述】:
我有一个 Java 程序,它使用 UDP 数据包与网络上的其他程序进行通信。我注意到在我的 Windows XP 机器上,我无法接收入站数据包,经过一番研究,我发现是防火墙造成了问题。
有没有办法为 Java 程序添加防火墙例外?谷歌搜索并没有透露任何信息。
有没有我可以在安装时运行的 DOS shell 命令来添加异常? (也无法在 Google 上找到任何相关内容。)
有没有办法让 Windows 知道入站数据包是被请求的?例如,我发送一个广播包,然后其他系统响应。对于允许响应数据包用于广播的端口,我能做些什么?
有没有一种完全不同的方式可以让我收到回复?我仍然需要广播,因为这将在甚至不一定有 DNS 的网络上运行,所以我不能依赖 Zeroconf 之类的东西(更不用说没有可用于 Java 的良好 Zeroconf 支持的事实)来发现网络上的其他机器。
谢谢。
【问题讨论】:
-
你不知道整个过程发生在哪个端口上吗?问候
-
如果有防火墙,你什么也做不了。您可以将防火墙视为切断的电线。自己修改防火墙设置也是非常糟糕的主意(并且需要以管理员身份运行)
-
好吧,对于接收端口号,我可以静态分配一个,也可以让操作系统决定并将该信息通过广播包传递给远程机器。所以,我想我可以通知防火墙特定端口,但我想知道所有这些其他程序如何在不涉及用户的情况下配置它。
-
我认为最简单的答案是找到一种方法让 Windows 知道传入的数据包是被请求的。如果我要建立一个传出 TCP 连接,那么同一连接的传入数据包就可以正常工作。不幸的是,传出的数据包必须是 UDP,因为它必须被广播(相对于可能数百次 TCP 尝试)。我可以使用稍微面向连接的数据报协议吗?
标签: java udp windows-firewall