是否可以使用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()
eval 所做的事情与您的想法完全不同。
eval
要通过网络发送数据,您需要将其 序列 化为字节数组,然后 反序列化 。在Python中,大多数对象的序列化可以通过pickle模块完成:
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])