当前位置:  开发笔记 > 编程语言 > 正文

.net中的双向/环回UDP

如何解决《.net中的双向/环回UDP》经验,为你挑选了1个好方法。

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

PC正在与一块远程硬件通信.它"回复发件人",因此数据报通过发送端口返回到我的PC.

PC正在与自己交谈(环回模式)进行测试和演示(测试应用程序通过UDP将假数据输入我们的主应用程序).

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

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

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

编辑

详细说明:

我们通过UDP与外部硬件通信.当它收到我们的通信时,它会回复源地址 - 所以我们会在同一个端口上收到消息.这部分工作正常.

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

所以我有两个问题:

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

2)如何做(1)不打破目前工作正常的外部通信!

由于我已经尝试了1或2个UdpClients的各种组合以及多种不同的设置(无济于事),我只是想知道是否有人设法让UPD环回正常工作,因为这可能会让我领先于解决方案,我可以在所有情况下工作.

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



1> Sachin Chava..:

这是设计的.

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

当从UDP发送数据时,它被广播.这意味着它只适用于广播时活着的接收器.

示例:

TCP就像一个电话.来电者叫接收者.接收方接受呼叫并进行通信.如果接收器不可用,则调用者将收到错误.(调用者是客户端,接收者是服务器侦听端口)

UDP就像FM无线电广播.无论是否有人在另一端听,都会在收音机上播放一首歌.如果接收器已经放置了他们的收音机,他们就会收到这首歌.如果歌曲在10:30发送,我的收音机在10:30开启,我可以听到这首歌.但是如果我把我的raido设置在10:35那么这意味着我已经错过了它并且无法再听到它.

更新

正如我所看到的,真正的问题是在端口1111上传输(例如)虽然应用程序X和通过SAME机器上的应用程序Y在端口1111上接收是您正在尝试实现的.

对于同样的我可以建议2个解决方法(不好但可行).

    如你所说,如果你在启动接收器后启动发射器,一切都很好.因此,请尝试定期重新启动发送器的逻辑.

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

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有