我有这段代码通过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:端口端点。
如果Camera
离线,会发生什么?
由于它是UDP,SendAsync
将正确发送数据,但ReceiveAsync
将永远等待响应。如果这两行代码(SendAsync
和ReceiveAsync
)定期执行,那么无限ReceiveAsync
会一直等待响应直到系统崩溃吗?
或者他们会在某个时间终止或被操作系统终止吗?是否必须手动实现定时器" kill" UDP套接字终止永恒的等待?
答案 0 :(得分:4)
UDP消息可能会丢失。这意味着如果对方没有重试其消息,您的接收确实可以永远等待。你需要暂停。
更糟糕的是,如果您多次运行此代码(意图多次发送),您可以收到一条用于其他发送的消息,因为在同一个套接字上进行并发读取时,未定义读取的内容是什么
如果你只是在没有超时的情况下排队越来越多的读数,你迟早会耗尽一些资源。别这么做。
可能你应该有一个接收循环,只接收它获得的所有内容并进行处理。
发送可以独立于此。
更好的是,使用像TCP这样的可靠传输。