2016-04-11 22 views
0

Ja, ich weiß UDP schlecht, aber leider habe ich keine andere Wahl - mein Server nimmt nur UDP ...Python - Senden von Hex-Array über UDP

Was ich habe, ist eine Liste, die Hex-Werte enthält, müssen die schicken aus UDP.

Wenn ich versuche, und senden Sie die Liste, die ich bekommen - ‚Typeerror: muss String oder Puffer sein, nicht auflisten‘

Wenn ich auf einen String (genannt aList in meinem Code) konvertiere ich bekommen - ‚Typeerror : eine ganze Zahl ist erforderlich‘ Drucke von aList = 09004000e3f00005f5

wenn ich aList in einen int mit Basis 16 ich konvertieren - ‚Typeerror: muß String oder Puffer, nicht lang‘seine

Grund vermutet, es ist etwas, aber ich vermisse es.

Einfache Code wie folgt aussieht ::

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() 
+1

Verwenden Sie Python 2 oder 3? – jython234

Antwort

1

ich nicht sehr gut informiert bin, wenn es um Socket-Modul Python kommt aber this Seite suchen Ich glaube, Sie zwei Dinge fehlen:

  • try Verwenden Sie z21.sendto anstelle von z21.send
  • versuchen Sie, Ihre Nachricht in einen Byte-Puffer mit Bytes zu konvertieren()

So wäre das Ergebnis wie folgt aussehen:

... other code 

try: 
    z21.sendto(bytes(msg) ,(UDP_HOST, UDP_PORT)) 

... following code 

Ich hoffe, das hilft.

+0

Nun, würdest du dir das ansehen? Fühle ich mich nicht wie ein Idiot. Das sieht jetzt so aus, als würde es jetzt senden, aber keine Antwort zurück, also Zeit, um Drahthaken hochzufeuern. Aber in diesem Stadium sieht gut aus. – MikeM