gpt4 book ai didi

c# - .net 中的双向/环回 UDP

转载 作者:行者123 更新时间:2023-11-30 19:50:01 25 4
gpt4 key购买 nike

我有一个应用程序需要在同一个端口上传输和接收。这可能发生在两种情况下:

  • PC 与远程硬件对话的地方。它“回复发件人”,因此数据报通过发送端口返回到我的 PC。

  • PC 与自身对话(环回模式)以进行测试和演示(测试应用通过 UDP 向我们的主应用提供虚假数据)。

这似乎只有在尝试实现环回时才会失败。我能让它正常工作的唯一方法是确保首先设置接收器 - 这是我无法保证的。

任何人都可以通过建议一种“正确”的方式来实现 UdpClient 以可靠地处理上述情况来帮助缩小我的搜索范围吗?

(我发现与远程硬件可靠工作的唯一解决方案是以双向方式使用单个 UdpClient,尽管我正在使用可能影响该发现的遗留代码。我尝试使用两个 UdpClients,但他们踩到对方的脚趾 - 在某些情况下,一旦一个客户端启动,另一个客户端无法连接。设置 ExclusiveAddressUse/ReuseAddress 以允许端口共享,我几乎可以让它工作,除了接收器必须先启动)

编辑

详细说明:

我们通过 UDP 与外部硬件通信。当它收到我们的通讯时,它会回复源地址 - 因此我们会在同一端口接收回消息。这部分工作正常。

但是,如果我尝试使用环回模拟外部硬件(即,我通过同一端口“对我自己”发送和接收),如果我在开始传输之前开始接收,我只能接收数据报。这工作正常 - 但如果我发送然后尝试接收,我永远不会收到任何数据。在这种情况下,我实际尝试发送的内容无关紧要。

所以我有两个问题:

1) 如何管理可靠工作的环回。

2) 如何在不中断当前正常工作的外部通信的情况下执行 (1)!

因为我已经尝试了 1 或 2 个 UdpClient 的各种组合和多种不同的设置(无济于事),我只是想知道是否有人设法让 UPD 环回正常工作,因为这可能给我一个导致我可以在所有情况下使用的解决方案。

感谢您花时间考虑这个问题...

最佳答案

这是设计使然。

与需要连接的 TCP 相比,UDP 通信连接较少。

当从 UDP 发送数据时,它被广播。这意味着它将仅对广播时处于事件状态的接收者可用。

示例:

TCP 就像一个电话。调用者调用接收者。接收者接受调用并进行通信。如果接收者不可用,调用者将得到一个错误。(调用者是客户端,接收者是监听端口的服务器)

UDP 就像调频广播。无论是否有人在另一端收听,歌曲都会在广播中播放。如果接收者打开了 radio ,他们就会收到这首歌。如果歌曲在 10:30 传送并且我的 radio 在 10:30 打开,我可以听到这首歌。但是,如果我在 10:35 将我的 raido 设置为开启,则意味着我已经错过了它并且将无法再次听到它。

更新

正如我所看到的,真正的问题是通过应用程序 X 在端口 1111 上传输(例如)并通过同一台机器上的应用程序 Y 在端口 1111 上接收是您想要实现的。

同样,我可以建议 2 个解决方法(不好但可行)。

  1. 如您所说,如果您在启动接收器后启动发射器,一切都很好。因此,只需尝试定期重新启动发送器的逻辑即可。

  2. 每次在 2 个端口上发送和接收。例如。 1111 和 2222。远程硬件将使用第一组 1111,演示应用程序将使用 2222。

关于c# - .net 中的双向/环回 UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2848649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com