Проблема заключается в том, что поток UDP принимает байты независимо от того, отправляете ли вы строку или целое число.Таким образом, программа, вероятно, упаковывает целое число в байты.
Приведенный ниже код является хаком, который игнорирует некоторые полученные данные.
Когда вы отправляете целое число 1 и получаете b'int \ x00, i \ x00 \ x00 \ x00 \ x00 \ x00\ x01 'int' говорит получателю, что это целое число.Далее следуют девять байтов, где целые числа обычно отправляются в 1, 2, 4 или 8 байтов.
Использование последних 8 байтов не возвращает значение 1, но использование последних четырех байтов делает, поэтомуприведенный ниже код разрезает байты [-4:], чтобы получить только последние четыре.
Вероятно, существует некоторая документация или проект с открытым исходным кодом, который правильно обрабатывает данные Max / MSP, поэтому я предлагаю изучить это.
Вот документы для импорта структуры, которые используются для распаковки данных: https://docs.python.org/3/library/struct.html
import socket
import struct
UDP_IP_ADDRESS = "127.0.0.1"
UDP_PORT_NO = 8813
serverSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
serverSock.bind((UDP_IP_ADDRESS, UDP_PORT_NO))
while True:
data, addr = serverSock.recvfrom(65536)
if data.startswith(b'int'):
# assumes 4 byte unsigned integer
received = struct.unpack('!I', data[-4:])[0]
else:
received = data.decode('utf-8')
print (repr(data)) # for debug purposes
print (type(received), received)