gpt4 book ai didi

c# - 许多 "UdpClient ReceiveAsync"会永远等待吗?

转载 作者:太空宇宙 更新时间:2023-11-03 21:30:35 29 4
gpt4 key购买 nike

我有这段代码通过 UdpClient 发送命令,然后等待响应:

cameraListener = new UdpClient(52381);      
cameraSender = new UdpClient();
cameraSender.Connect(endPoint);

int dataSent = await cameraSender.SendAsync(command, command.Length);
UdpReceiveResult result = await cameraListener.ReceiveAsync();

注意:“endPoint”只是一个普通的 IPAddress:port 端点。

如果 Camera 离线会怎样?

由于它是 UDP,SendAsync 将正确发送数据,但 ReceiveAsync 将永远等待响应。如果这两行代码(SendAsyncReceiveAsync)周期性执行,ReceiveAsync 将无限等待响应,直到系统将碰撞?

或者它们会在某个时候终止或被操作系统终止?是否必须实现一个计时器来手动“杀死”UDP 套接字以终止永恒的等待?

最佳答案

UDP 消息可能会丢失。这意味着如果对方不重试其消息,您的接收确实可以永远等待。你需要暂停。

更糟糕的是,如果您多次运行此代码(意图发送多次),您可能会收到一条本应发送给其他人的消息,因为在同一个套接字上并发读取时,未定义读取的内容是什么数据.

如果你只是在没有超时的情况下排队越来越多的读取,你迟早会耗尽一些资源。不要那样做。

可能,您应该有一个接收循环,它只接收它获取的所有内容并进行处理。

发送可以独立于此。

更好的是,使用像 TCP 这样的可靠传输。

关于c# - 许多 "UdpClient ReceiveAsync"会永远等待吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24492461/

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