【发布时间】:2016-04-11 22:07:52
【问题描述】:
是的,我知道 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()
【问题讨论】:
-
你使用的是 Python 2 还是 Python 3?