我正在尝试编写与 Particle Photon 微控制器通信的 python 服务器。微控制器应在状态改变时发送更新,并接受来自服务器的命令以运行校准或其他操作。
Python 中有一些原始套接字的行为更底层 (How Do I Use Raw Socket in Python?),但是,我目前没有使用其中之一。
在我的 python 服务器代码中,我将套接字作为 SOCK_STREAM 打开:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
现在,我想确保我的包裹在两端都完好无损,并且正在考虑添加校验和。但是,TCP 的包中已经有校验和,所以我还需要在我的协议中构建另一个校验和吗?
鉴于我在 C 风格的低级语言和 Python 之间进行通信,我应该使用 RAW_Sockets 吗?
所有通信都通过 Wifi 在 LAN 上进行。
答案 0 :(得分:1)
然而,TCP 的包中已经有一个校验和,所以我还需要在我的协议中构建另一个校验和吗?
取决于您需要什么样的保证。如果相对而言 weak guarantees of the TCP checksum 对您来说已经足够了,那么您不需要再添加一个。如果不是,您需要以某种方式向您在应用程序和微控制器之间使用的协议添加一些更强大的校验和方法。
<块引用>鉴于我在 C 风格的低级语言和 Python 之间进行通信,我应该使用 RAW_Sockets 吗?
原始套接字不会在您的用例中增加任何价值,只会使一切变得更加复杂。如果在实际应用程序负载之外需要大量控制,则使用这些。但是这些不是添加一些更强校验和的正确方法 - 这应该在您的应用程序协议中完成,从而体现在数据有效负载中。即使没有原始套接字,也可以通过各种 setsockopt
实现有效载荷之外的一些控制。