networking - 通过 Internet 发送 UDP 数据包

标签 networking udp packet udpclient

我正在尝试了解 P2P/去中心化网络的一些细节。我的问题如下。假设我有两台名为 comp1 和 comp2 的机器。现在 comp1 设置在我的家庭网络上的路由器后面,而 comp2 也位于我的办公室中,也位于路由器后面。假设端口被正确转发,我是否可以像这样在互联网上来回发送 UDP 数据包?为了更深入地了解我正在调查的内容,我试图弄清楚一个新节点如何在不使用中央服务器的情况下发现现有节点。

谢谢!

最佳答案

假设,正如您所说,端口转发正确,您可以将 UDP 数据包发送到路由器后面的 2 个客户端。

在本地 Intranet 上检测客户端的一种好方法可能是使用多播,但是这在 ISP(至少在英国)没有广泛的支持,因此不能依赖。 Multicast 被许多设备发现平台使用,例如 mDNS(用于 Apple 的 Bonjour)

http://en.wikipedia.org/wiki/Multicast

(它基本上是由客户订阅组,然后向该组发送消息)

我认为通过互联网发现新客户的最佳方式是让新客户联系一台服务器以告知其存在,然后中央服务器将告诉所有其他客户有关您的信息。这例如在现代 war 2 等 P2P 游戏中使用,这就是“跟踪器”在 BitTorrent 协议(protocol)中所做的事情。

这不是完全去中心化的,但它可能是最容易实现和最可靠的。

关于networking - 通过 Internet 发送 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5503320/

相关文章:

linux - 通过 SSH 连接到 Raspberry Pi,无需端口转发

c++ - 无法从 Windows 7 访问 Linux UDP 服务器

java - 无法通过网络传输来自麦克风的音频字节

c# - NetworkStream 如何在两个方向上工作?

android - 为什么我们不能从 Android 模拟器发送 UDP 数据包?

networking - navigator.connection.type 即使设备已准备就绪 * 或 * 设备从未准备好也无法正常工作

c - 绑定(bind)到 C 中的特定 IP for ubuntu

java - 如何使用 Java 监控我的网络连接?

tcp - 是否有任何已知的方法来定义特定于应用程序的消息?

.net - 如何监听任何端口上的广播数据包?