将通信从串行端口转换为 UDP 数据包的问题
Issues converting communication from serial port to UDP packets
我有一些用 C 编写的(非常)旧的软件,用于通过串行电缆 (RS232) 通信的两个设备 - 发送和接收消息。
现在旧设备将被没有串行端口但只有以太网的新现代设备取代。
因此,现在的要求是将旧的串口通信转换为UDP通信(暂时选择C++)。
所以,我对此有一些疑问 "conversion":
1)假设有两个对等点A和B,我是否应该为每个对等点实现一个服务器和一个客户端,即:serverA+clientA(对于设备A)和serverB+clientB(对于设备乙)?或者有一些 other/different 方法吗?...
2) 旧的串行通信有一些 CRC,可能是为了确保一些可靠性。是否也需要在 UDP 通信上实施 CRC(在我的自定义消息中)?
预先感谢您的时间和耐心。
1) UDP 是一种无连接协议,因此这里没有严格的客户端和服务器角色。您只需要一些处理接收的代码和一些便于发送的代码。
2) UDP 不需要 CRC。首先,每个以太网帧中都有一个 FCS (CRC32)。然后,IP 数据包中有一个 header 校验和。毕竟,校验和已经包含在UPD数据报中了!
请同时考虑以下事项:
在日常生活中,COM 端口早已离开物理世界,但它们仍然以虚拟形式存在于我们身边(甚至 Android 手机也有 COM 端口)。在 USB/TCP/whatever 上做 COM 有很多解决方案。其中一些是 PC 应用程序,一些是在硬件中实现的(参见 Arduino's COM over USB),
当 UDP 数据报未通过校验和测试时,它(通常)会被静默丢弃。所以在 UDP 中你没有 built-in 区分 "nothing was received" 和 "we received something but that's not a valid thing" 的能力。如果您想在应用程序级别处理这些情况,请选中 UDP-Lite(我相信它应该会简化移植过程)。
传输数据的默认选择是 TCP,因为它提供可靠的传送。 UDP 推荐给关心实时性的用户和那些可以容忍一些数据丢失的用户。或者对于那些关心资源的人。
如果您要发送大量数据或准备好处理端口上的数据包拥塞,请选择 TCP。如果您打算将来使用无线网络或准备好处理周期性的大量数据包丢失,请选择 TCP。
如果您的设备非常小或装满了其他东西,则可以直接在 Level 2(以太网)上运行。
我有一些用 C 编写的(非常)旧的软件,用于通过串行电缆 (RS232) 通信的两个设备 - 发送和接收消息。
现在旧设备将被没有串行端口但只有以太网的新现代设备取代。
因此,现在的要求是将旧的串口通信转换为UDP通信(暂时选择C++)。
所以,我对此有一些疑问 "conversion":
1)假设有两个对等点A和B,我是否应该为每个对等点实现一个服务器和一个客户端,即:serverA+clientA(对于设备A)和serverB+clientB(对于设备乙)?或者有一些 other/different 方法吗?...
2) 旧的串行通信有一些 CRC,可能是为了确保一些可靠性。是否也需要在 UDP 通信上实施 CRC(在我的自定义消息中)?
预先感谢您的时间和耐心。
1) UDP 是一种无连接协议,因此这里没有严格的客户端和服务器角色。您只需要一些处理接收的代码和一些便于发送的代码。
2) UDP 不需要 CRC。首先,每个以太网帧中都有一个 FCS (CRC32)。然后,IP 数据包中有一个 header 校验和。毕竟,校验和已经包含在UPD数据报中了!
请同时考虑以下事项:
在日常生活中,COM 端口早已离开物理世界,但它们仍然以虚拟形式存在于我们身边(甚至 Android 手机也有 COM 端口)。在 USB/TCP/whatever 上做 COM 有很多解决方案。其中一些是 PC 应用程序,一些是在硬件中实现的(参见 Arduino's COM over USB),
当 UDP 数据报未通过校验和测试时,它(通常)会被静默丢弃。所以在 UDP 中你没有 built-in 区分 "nothing was received" 和 "we received something but that's not a valid thing" 的能力。如果您想在应用程序级别处理这些情况,请选中 UDP-Lite(我相信它应该会简化移植过程)。
传输数据的默认选择是 TCP,因为它提供可靠的传送。 UDP 推荐给关心实时性的用户和那些可以容忍一些数据丢失的用户。或者对于那些关心资源的人。
如果您要发送大量数据或准备好处理端口上的数据包拥塞,请选择 TCP。如果您打算将来使用无线网络或准备好处理周期性的大量数据包丢失,请选择 TCP。
如果您的设备非常小或装满了其他东西,则可以直接在 Level 2(以太网)上运行。