【发布时间】:2011-02-05 20:07:55
【问题描述】:
我有一个应用程序需要在同一个端口上传输和接收。这可能在两种情况下发生:
PC 与远程硬件通信的位置。它“回复发送者”,因此数据报通过发送端口返回到我的 PC。
PC 与自身对话(环回模式)以进行测试和演示(测试应用通过 UDP 将虚假数据馈送到我们的主应用)。
这似乎只在尝试实现环回时失败。我可以让它工作的唯一方法是确保首先设置接收器 - 这是我无法保证的。
任何人都可以通过建议一种“正确”的方式来实现 UdpClient(s) 以可靠地处理上述情况,从而帮助缩小我的搜索范围吗?
(我发现与远程硬件可靠工作的唯一解决方案是以双向方式使用单个 UdpClient,尽管我正在使用可能会影响该发现的遗留代码。我尝试使用两个 UdpClients,但他们互相踩到脚趾 - 在某些情况下,一旦启动一个客户端,另一个客户端就无法连接。使用 ExclusiveAddressUse/ReuseAddress 设置以允许端口共享,我几乎可以让它工作,除了接收器必须先启动)
编辑
详细说明:
我们通过 UDP 与外部硬件通信。当它收到我们的通信时,它会回复源地址——所以我们会在同一个端口上接收回消息。这部分工作正常。
但是,如果我尝试使用环回模拟外部硬件(即我通过“给自己”的同一端口发送和接收),则只有在开始传输之前开始接收数据报时,我才能接收数据报。效果很好 - 但如果我发送然后尝试接收,我永远不会收到任何数据。在这种情况下,我实际尝试发送的内容无关紧要。
所以我有两个问题:
1) 如何管理可靠工作的环回。
2)如何在不破坏当前工作正常的外部通讯的情况下做到(1)!
由于我尝试了 1 或 2 个 UdpClient 的各种组合以及多种不同的设置(无济于事),我只是想知道是否有人设法让 UPD 环回正常工作,因为这可能会给我一个导致我可以在所有情况下工作的解决方案。
感谢您花时间考虑这个问题...
【问题讨论】:
-
您能否澄清一下:硬件或测试应用程序是否向您的应用程序发送 UDP 数据包并返回响应?或者您的应用程序是否向硬件或测试应用程序发送数据包,然后这些发送响应?您能否编辑您的问题并显示各方之间的典型数据交换?
-
按照 Mike Scott 的建议,请进一步澄清,以便您得到准确的答案。