_寒潭雁影 2020-10-27 10:38 采纳率: 0%
浏览 159

多进程接收UDP广播的丢包问题

最近在windows10上做项目,需要从网络中获取不同设备通过udp广播发送过来的数据,IP地址全部都是255,255,255,255,设备的端口号不同。

本人一开始使用多个进程分别从不同的端口号中去接收数据,发现只开一个进程(也就是一个程序去接收其中一个设备数据的时候接收很稳定),但开启两个进程时发现两者会相互影响,有少量丢包,有时甚至有一个进程直接收不到数据,而关掉另外的进程后其就恢复正常了。按照本人理解,两个进程接收数据的端口号不一样应该不会互相影响才对,不知道有没有老哥了解这方面的东西,希望不吝赐教!!!

ps:后来本人将不同设备的端口号改成一样的,然后只用一个进程去接收数据,在接收数据后才通过包头去区分不同的设备,同样不会丢包,这应该从侧面证明了不是计算机性能的问题。

难道说对于255,255,255,255这种有限广播地址,一台计算机就只能有一个进程去收其中的数据,哪怕端口号不同也不行?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 23:01
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于UDP协议的特性导致的,UDP是一个无连接、不可靠的传输层协议,它没有拥塞控制机制,因此可能会出现数据丢失的情况。当多个客户端同时向同一个服务器发送UDP报文时,如果其中一个客户端的报文被丢弃或者延迟,则其他客户端接收到的数据可能也会受到影响。

    针对您的情况,您可以通过以下几种方式来解决:

    1. 采用TCP/IP协议栈中的三次握手(SYN/ACK)和四次挥手(FIN/SYN),可以提高可靠性。
    2. 在UDP通信中,您可以考虑使用流控制机制,比如滑动窗口算法,以避免短时间内大量数据的发送导致的过载。
    3. 使用UDP重传功能,即在数据到达之前进行重传,这样即使部分数据未能正确到达也可以确保最终能够接收所有数据。
    4. 尝试使用UDP的多播或组播模式,减少广播范围内的主机数量,从而降低单个客户端的负荷。

    为了更具体地回答您的问题,我建议您提供一些关于您的应用程序的详细信息,例如使用的编程语言、平台、软件库等,以便我们能更好地帮助您解决问题。

    评论

报告相同问题?