是的我知道UDP很糟糕但不幸的是我别无选择 - 我的服务器只接受UDP ...
我所拥有的是包含十六进制值的列表,需要将其发送出UDP。
如果我尝试发送列表,我会 - ' TypeError:必须是字符串或缓冲区,而不是列表'
如果我转换为字符串(在我的代码中称为aList),我得到 - ' TypeError:需要一个整数' 打印aList = 09004000e3f00005f5
如果我将aList转换为带有基数16的int,我得到 - ' TypeError:必须是字符串或缓冲区,而不是长'
怀疑它是基本的东西,但我错过了它。
简单代码看起来像::
import socket #for sockets
UDP_PORT = 21105;
UDP_HOST = '10.194.34.151';
z21 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def _getLocoInfo (id):
arr = [ 0x09, 0x00, 0x40, 0x00, 0xE3, 0xF0, 0x00, id]
arr.append(arr[5]^arr[6]^arr[7])
return arr
msg = _getLocoInfo(0x05)
aList = "".join("%02x" % b for b in msg)
print (a)
try :
z21.send(msg ,(UDP_HOST, UDP_PORT) )
# receive data from client (data, addr)
d = s.recvfrom(1024)
print ('Server reply : ' + reply)
except socket.error as e:
print ('Error Code : ' + str(e[0]) + ' Message ' + e[1])
sys.exit()
答案 0 :(得分:1)
对于python的套接字模块,我不是很了解但是在查看this页面时我觉得你错过了两件事:
所以结果看起来像这样:
... other code
try:
z21.sendto(bytes(msg) ,(UDP_HOST, UDP_PORT))
... following code
我希望这会有所帮助。