dataToRead = struct.unpack('H', socket.read(2))[0]
data = socket.read(dataToRead)
if TYPE_FOO == type:
    handleFoo(data)
elif TYPE_BAR == type:
    handleBar(data)
else:
    raise UnknownTypeException(type)
Как использовать Python и протокольные буферы Google для десериализации данных, отправляемых по TCP