所以我必须创建一个像这样工作的消息协议:
codFunc arg1 arg2...
例如:
0 'hello world'
10 'user' 'password'
现在我连接发送,并使用string.split
来阅读,但由于多种原因,这不是最佳方式。
所以我的问题是,创建协议的最佳方法是什么?我应该使用哪些现有协议?
感谢。
答案 0 :(得分:2)
split的错误在于,如果您的用户名包含空格,则会将其拆分为单独的参数。
拆分一次以获得负责的功能编号:
num, args = s.split(None, 1)
将字符串解析为参数,可能使用shlex
:
import shlex
argv = shlex.split(args)
删除周围的引号:
argv = [s.strip(shlex.quotes) for s in argv]
调用您的函数:
myfunc(*argv)
答案 1 :(得分:2)
shlex可能是好的,分裂有引用空白的问题,pickle是不安全的。 JSON很好。
我喜欢用: https://www.google.com/search?gcx=c&ix=c1&sourceid=chrome&ie=UTF-8&q=bufsock ...使用空终止的ASCII数据或其他东西来锚定协议的一部分。
请记住,send()和recv()之间并不总是一对一的关系。很容易对此感到自满,但它可能会在网络负载下导致可靠性问题。