2つのシステムが通信できるようにしようとしています。C#アプリケーションがPythonで記述されたTCPサーバーとゴミ箱を話し合うようにしたいのです。
最初にシリアル化について考え、グーグルのprotobufをよく見てみました。ただし、複雑な型とデータ構造がある場合にのみシリアル化が必要になるわけではありません。私はしません。列挙型のみを送信したい(列挙型要素のデフォルトの基になる型は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()