(我在python中写这个)
我已经坚持了一段时间了: 我正在编写一个UDP收集器(在python中),正在发送数据。但是,我无法从中获取正确的数据。我的一个同事编写了一个UDP收集器(在golang中)并收到以下输出:(关键差异将加粗)
%!(EXTRA chan_service.Request = {1501844689333211815 0 STATS user-master-01 172.22.64.123 30 true [8 1 16 10 24 100 32 232 7] })
但我得到了这些数据:
{ “unix_time”:1501844534270295150 “proto_name”: “STATS”, “HOST_NAME”: “用户主-01”, “host_ip”: “172.22.64.123”, “有效期”:30, “is_delta”:真, “tm_data”: “的 CAEQChhkIOgH ”}
为什么我没有收到与他一样的tm_data条目的任何想法?
这是我的代码:
def udp_port_data(port):
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(("", port))
print "\n\nThe connection to the port has been established\n\n"
data, addr = sock.recvfrom(65535)
print "\n\nThe data has been received from the port\n\n"
print "The data is : ", data
sock.close()
答案 0 :(得分:0)
似乎tm_data
是base64编码的,而Go实现正在将其解码为数字列表。我得到了相同的结果:
import json
import base64
data = '{"unix_time":1501844534270295150,"proto_name":"STATS","host_name":"mhegglin-master-01","host_ip":"172.22.64.123","expiration":30,"is_delta":true,"tm_data":"CAEQChhkIOgH"}'
x = json.loads(data)
print [ord(c) for c in base64.decodestring(x['tm_data'])]
答案 1 :(得分:0)
在使用我的代码后,我发现这对我的目的更有效。
buff = json_data["tm_data"].decode('base64', "strict")
仍然,谢谢你搞清楚它是用base64编码的!