У меня есть функция прослушивания udp на 2 хостах.Предполагается, что он будет вести себя так: всякий раз, когда host1 получает сообщение udp, начинающееся с «10.0.0», он преобразует список в строку и отправляет его через сокет udp.Если какое-либо другое сообщение будет достигнуто на host1, оно преобразует сообщение из строки в список.Вот код:
def read_udp(s):
data,addr = s.recvfrom(1024)
if data.startswith('10.0.0'):
data_split = data.split(" ")
num = int(data_split[1])
ipToTransfer = address
transferStart = start[-num:]
msg = pickle.dumps(transferStart)
udp_send(msg, ipToTransfer)
else:
recvStart = pickle.loads(data)
def udp_send(s, ip):
UDP_IP = ip
if(type(s) == str):
MESSAGE = s
else:
MESSAGE = pickle.dumps(s)
print ("UDP target IP & port:", UDP_IP, port)
#print ("message:", MESSAGE)
sock3 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock3.sendto(MESSAGE, (UDP_IP, port))
Этот код работал нормально, когда длина списка была ниже 60 ~ 65, но когда длина списка растет выше этого значения, я сталкиваюсь с ошибкой, говорящей, что:
File "process.py", line 273, in <module>
run
File "process.py", line 127, in read_udp
recvStart = pickle.loads(data)
File "/usr/lib/python2.7/pickle.py", line 1388, in loads
return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 864, in load
dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 960, in load_float
self.append(float(self.readline()[:-1]))
ValueError: could not convert string to float
Это строка 127 моего кода: recvStart = pickle.loads(data)
Что не так?Я не могу понять проблему, так как она работала, когда длина моего списка была меньше 60.
Я протестировал 2 сценария.В первом из них было 8 элементов в списке, и выходные данные pickle.dumps для каждого из них были такими:
Элемент в списке: 1549286402.7232 output pickle.dump: aF1549286402.7232
но теперь, когда я тестирую его с 60 элементами в списке, выходные данные для каждого элемента списка такие же, как и раньше, но в конце строкового представления списка есть a.
.Что это и является ли причиной моей проблемы?