是否可以使用Python通过UDP套接字发送数组?我正在使用Python 2.5并尝试发送一个简单的数组,但它不起作用.它可以成功发送数组,但是当我尝试使用数组项打印它时,程序崩溃了.我不确定错误是什么,因为我采取了将数据转换为数组的预防措施,但它不起作用.希望我尽可能清楚地解释问题.我很感激你的帮助!
# Client program from socket import * import numpy from array import* # Set the socket parameters host = "localhost" port = 21567 buf = 4096 addr = (host,port) # Create socket UDPSock = socket(AF_INET,SOCK_DGRAM) def_msg = "===Enter message to send to server==="; print "\n",def_msg a = array('i',[1,3,2]) # Send messages while (1): data = raw_input('yes or now') if data!= "yes": break else: if(UDPSock.sendto(a,addr)): print "Sending message" # Close socket UDPSock.close() # Server program from socket import * # Set the socket parameters host = "localhost" port = 21567 buf = 4096 addr = (host,port) # Create socket and bind to address UDPSock = socket(AF_INET,SOCK_DGRAM) UDPSock.bind(addr) # Receive messages while 1: data,addr = UDPSock.recvfrom(buf) L = eval(data) if not data: print "Client has exited!" break else: print "\nReceived message '", L[1],"'" # Close socket UDPSock.close()
hamstergene.. 14
eval
正在做一些与你的想法完全不同的事情.
要通过网络发送数据,您需要将其序列化为一个字节数组,然后将其反序列化.在Python中,大多数对象的序列化可以通过pickle
模块完成:
if (UDPSock.sendto( pickle.dumps(a), addr)):
反序列化:
data,addr = UDPSock.recvfrom(buf) L = pickle.loads(data) print repr(L) # prints array('i', [1, 3, 2])
Paul.. 6
我个人会使用tostring
,fromstring
因为内置的序列化方法快了很多倍,而pickle 可能不支持 NaN,Inf和其他未定义的值.
eval
正在做一些与你的想法完全不同的事情.
要通过网络发送数据,您需要将其序列化为一个字节数组,然后将其反序列化.在Python中,大多数对象的序列化可以通过pickle
模块完成:
if (UDPSock.sendto( pickle.dumps(a), addr)):
反序列化:
data,addr = UDPSock.recvfrom(buf) L = pickle.loads(data) print repr(L) # prints array('i', [1, 3, 2])
我个人会使用tostring
,fromstring
因为内置的序列化方法快了很多倍,而pickle 可能不支持 NaN,Inf和其他未定义的值.