【发布时间】:2015-04-21 06:50:42
【问题描述】:
我是 Winsock 编程的新手,所以如果这是一个“愚蠢”的问题,请提前道歉。
我编写了一个 Windows 应用程序,它通过 UDP 将数据发送到外部设备。由于 UDP 是外部设备支持的唯一协议,因此我无法使用更强大的协议,例如 TCP。
现在,如果我的程序快速连续调用 6 次 WSASentTo,则会发生以下两种情况之一:
如果上一条消息是最近发送的,而目标设备仍在 Windows 的 ARP 缓存中,则所有 6 条消息都会发送到外部设备。
但是,如果设备不再位于 Windows 的 ARP 缓存中,则只会发送一两条消息。其他人似乎消失在某个地方。
我的应用每次调用 WSASendTo 时都使用不同的缓冲区,因此我的应用不应该覆盖它自己的数据。我也认为我已经为重叠 I/O 正确设置了 WSASendTo。这些消息非常小(每个只有大约 50 个数据字节),所以我无法想象我会在任何地方溢出缓冲区。 “网络”仅由 PC 和目标设备组成,通过一根 cat5 电缆将两者连接起来。
虽然我可以添加一个常规的“心跳”以将设备保存在 Windows 的 ARP 缓存中(并且可能会),但我仍然担心某些事情没有按应有的方式工作。
有什么想法吗?
【问题讨论】: