Ответ Майка - тот, который вы ищете, но это не та ситуация, в которой вы хотите оказаться. Вам следует разработать протокол беспроводной связи, который использует поле фиксированной длины, которое описывает, сколько данных собираетсябыть отправленным.Это тип-длина-значение протокол, который вы найдете снова и снова и снова в сетевых протоколах.Это защищает ваш протокол от непредвиденных требований и помогает изолировать проблемы передачи по сети от программных.
Отправляющая сторона становится чем-то вроде:
socket.write(struct.pack("B", type) #send a one-byte msg type
socket.write(struct.pack("H", len(data)) #send a two-byte size field
socket.write(data)
А принимающая сторона что-то вроде:
type = socket.read(1) # get the type of msg
dataToRead = struct.unpack("H", socket.read(2))[0] # get the len of the msg
data = socket.read(dataToRead) # read the msg
if TYPE_FOO == type:
handleFoo(data)
elif TYPE_BAR == type:
handleBar(data)
else:
raise UnknownTypeException(type)
В конечном итоге вы получаете формат беспроводного сообщения, который выглядит следующим образом:
struct {
unsigned char type;
unsigned short length;
void *data;
}