我試圖讓兩個系統進行通信,我希望我的C#應用程序與用Python編寫的TCP服務器交談垃圾。如何發送一個枚舉到python tcp服務器?
首先我想到了序列化,並仔細看了一下google的protobuf。但是,如果你有複雜的類型和數據結構,你不需要序列化。我不。我只想發送一個enum()枚舉元素的默認底層類型是int(帶符號的32位整數),)。
但定義枚舉是相當大的(C#):
[Flags]
public enum RobotCommands
{
reset = 0x0, // 0
turncenter = 0x1, // 1
turnright = 0x2, // 2
turnleft = 0x4, // 4
standstill = 0x8, // 8
moveforward = 0x10, // 16
movebackward = 0x20,// 32
utility1on = 0x40, // 64
utility1off = 0x80, // 128
utility2on = 0x100, // 256
utility2off = 0x200 // 512
}
所以真的,我需要序列化? Python能夠讀取我發送的枚舉的最簡單方法是什麼?
我試過只發送它作爲字符串,希望將它們轉換回來,但他們似乎是字符串:
#!/usr/bin/env python
import socket
TCP_IP = '192.168.1.66'
TCP_PORT = 30000
BUFFER_SIZE = 20 # Normally 1024, but we want fast response
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connection address:', addr
while True:
data = conn.recv(BUFFER_SIZE).encode("hex")
print "received data:", data
if((data & 0x8) == 0x8):
print("STANDSTILL");
if not data: break
conn.send(data)
conn.close()
你正在混淆十六進制python文字int表示法,並將一個字節編碼爲十六進制表示。 *它們不是同一件事*。我已經在[前一個問題](http://stackoverflow.com/q/11791161/)中告訴過你結構模塊。 – 2012-08-05 11:34:57