Python:用socket模块从物联网云接收发送到数据,不知道如何加上或去除结束符?

在整树莓派的物联网智能家居,用Python的socket模块和服务器通信。用的是乐为物联网平台,其规定在通信时发送和接收都以&^!为结束符来判断是否为完整包。比如发送字符串str的{"method": "response","result": {"successful": true,"message": "successful","data":[{"id":"button1","value":"0"}]}}&^!

1.其中&^!前面的应该是一个字典其中嵌套着字典和列表,那么我想问如何给这个字典加上&^!的特殊字符?
2.又如我接收到了字符串型str的{"method":"send","gatewayNo":"02","userkey":"e789edfbfbc547c2b497281ac3b997bd","f":"getAllSensors"}&^!
那么我如何把&^!去除掉,并把数据变成可操作的字典型数据?

1 str = '{"method": "response","result": {"successful": true,"message": "successful","data":[{"id":"button1","value":"0"}]}}'
要在str后面加上'&^!", 可以直接使用 str = str + '&^!'
其结果:
print str就为
{"method": "response","result": {"successful": true,"message": "successful","data":[{"id":"button1","value":"0{"method": "response","result": {"successful": true,"message": "successful","data":[{"id":"button1","value":"0"}]}}&^!

2 去掉str后面的'&^!',可以直接使用str = str.strip('&^!')

socket模块提供了几个函数用于使用主机名和地址来工作。

gethostname()返回运行程序所在的计算机的主机名:

import socket
socket.gethostname()
'lenovo'

gethostbyname(name) 尝试将给定的主机名解释为一个IP地址。首先将检查当前计算机是否能够解释。如果不能,一个解释请求将发送给一个远程的DNS服务器(远程的DNS服务器 还可能将解释请求转发给另一个DNS服务器,直到该请求可以被处理)。gethostbyname函数返回这个IP地址或在查找失败后引发一个异常。

socket.gethostbyname('lenovo')
'192.168.1.4'
socket.gethostbyname('www.jb51.net')
'222.76.216.16'

一个扩展的形式是gethostbyname_ex(name),它返回一个包含三个元素的元组,分别是给定地址的主要的主机名、同一IP地址的可选的主机名的一个列表、关于同一主机的同一接口的其它IP地址的一个列表(列表可能都是空的)。

socket.gethostbyname('www.163.com')
'60.191.81.49'
socket.gethostbyname_ex('www.163.com')
('www.cache.split.netease.com', ['www.163.com'], ['60.191.81.48', '60.191.81.49
, '60.191.81.50', '60.191.81.51', '60.191.81.52', '60.191.81.53', '60.191.81.54
, '220.181.28.50', '220.181.28.51', '220.181.28.52', '220.181.28.53', '220.181.
8.54', '220.181.31.182', '220.181.31.183', '220.181.31.184'])

gethostbyaddr(address)函数的作用与gethostbyname_ex相同,只是你提供给它的参数是一个IP地址字符串:

socket.gethostbyaddr('202.165.102.205')
('homepage.vip.cnb.yahoo.com', ['www.yahoo.com.cn'], ['202.165.102.205'])

getservbyname(service,protocol)函数要求一个服务名(如'telnet'或'ftp')和一个协议(如'tcp'或'udp'),返回服务所使用的端口号:

socket.getservbyname('http','tcp')
80
socket.getservbyname('telnet','tcp)
23

那字典转成字符串。然后尾巴上拼接&!

接收的时候。字符串先去除末尾的&!。然后字符串用json loads转换成字典

你的意思是字符串和字典的转换吗?如果是的话用python的json包就可以了,你的这个字符串是json格式的数据,用json.loads就可以转换为字典。至于你说的末尾符号的问题,应该是字符串的拼接操作吧。

你的意思是字符串和字典的转换吗?如果是的话用python的json包就可以了,你的这个字符串是json格式的数据,用json.loads就可以转换为字典。至于你说的末尾符号的问题,应该是字符串的拼接操作吧。