设计一个简单的网络数据包
我正在学习用Python进行套接字编程,想知道封装数据的最佳或典型方法是什么?我的数据包将用于在接收端发出运行、停止、配置等命令。使用JSON格式会有帮助吗,还是直接用文本就可以了?
4 个回答
0
如果你正在开发一些东西作为学习练习,可能会发现使用一种结构化的文本格式(也就是人类可读和可写的格式)是最好的选择。
举个例子,你可以为每个命令使用固定数量的字段,或者使用固定宽度的文本字段和/或容易解析的字段分隔符。
一般来说,文本在数据包大小上效率较低,但它的好处是,如果你进行数据包捕获(比如使用wireshark),或者想用telnet模拟一个客户端时,你可以很容易地读取这些数据。
而且如果这只是一个学习练习,那么调试的方便性就是一个很重要的问题。
1
我建议你先用纯文本开始,这样更容易调试。你的文本格式取决于你在做什么,以及有多少个命令、参数等等。你有没有想过你的命令应该是什么样子的?一旦你弄清楚了这些,它可能会自然地给你一个格式的建议。
你是用TCP还是UDP?TCP比较简单,因为它是一个流,但如果你用的是UDP,要记住UDP数据包的最大大小,这样你就知道你的消息可以有多大了。
1
我建议你使用一种固定的格式,或者说大部分是固定的格式,这样会让事情变得简单一些。
然后你可以使用一些功能,比如标准库里的 struct.Struct,它有 pack() 和 unpack() 这两个方法,或者你也可以试试功能更强大的包,比如 Construct,这样你就可以省去很多解析的工作了 ;-)