有几种设备通过 TCP / IP 向套接字服务器发送套接字数据。有些设备以二进制编码的十六进制字符串发送数据,其他设备是 ASCII字符串。
EG;
如果设备以 ASCII字符串类型发送数据,脚本将立即开始处理而不进行任何转换。
如果设备发送二进制编码的十六进制字符串,脚本必须首先将二进制编码的十六进制字符串转换为十六进制字符串;
data = binascii.hexlify(data)
对于该简单的单行,有两个脚本针对不同的数据类型运行。但是,我认为如果脚本知道传入的数据类型,可以在一个脚本中完成。有没有办法在Python中发现传入套接字数据的类型?
答案 0 :(得分:1)
如果可以的话,你应该让发送设备通过使用不同的TCP端口发信号通知他们发送的数据,或者为每个消息添加"h"
表示十六进制或"a"
作为ascii - 甚至可以使用已建立的协议,如XML-RPC
实际上你只能在某些情况下确定,因为所有十六进制编码的字符串都是有效的ascii,而一些ascii字符串是有效的十六进制,如"CAFE"
。
您可以确保可以使用
import string
def is_possibly_hex(s):
return all(c in string.hexdigits for c in s)
或
import binascii
def is_possibly_hex(s):
try:
binascii.unhexlify(s)
except binascii.Error:
return False
return True