Это будет немного необычный пост, так как у меня нет проблем, все работает отлично, но понимаю ли я это - НЕТ!
У меня есть стандартная настройка подключения к сокету et c и потоки данных проходят без проблем:
while True:
msg = sock_net.recv(100)
""" Do something with the data"""
msg = ''
Но это работает независимо от того, что я делаю с размером буфера .recv. Если я распечатаю «msg», оно будет размером с установленный мной буфер - хорошо, это поток данных - но он усекает данные, и следующее «msg» не является продолжением, например:
b '$ WIMWD, 218.5, T, 219.0, M, 10.6, N, 5.5, M * 69 \ r \ n $ WIMWV, 217.0, R, 10.6, N, A * 10 \ r \ n $ WIMWV, 217.0, T, 10.6, N, A * 16 \ r \ n $ IIH 'b' $ SDDPT, 3.7 ,, * 51 \ r \ n $ IIHDG, 1.7 ,,, 0.4, W * 32 \ r \ n $ SDMTW ,, C* 1A \ r \ n $ SDVLW ,, N, 805.2, N, 936.4, N, 936.4, N * 7B \ r \ n $ SDVHW, 1 '
Тем не менее, у меня есть очень конкретный c код чтобы проанализировать поток данных, чтобы получить то, что мне нужно, поэтому в течение while l oop я делаю следующее:
sentences = str(msg)[2:-1].replace("\\r\\n", "").split("$")
sentences = [string for string in sentences if string != ""]
for sentence in sentences:
sentence = '$' + sentence
nmea = sentence.split(",")
And HEAVEN; Я получаю именно то, что мне нужно (я не буду go объяснять, почему я не использовал msg.decode ("utf-8"), но это не дало мне того, что я хотел), но я получаю, например: [ '$ WIMWD, 218.5, T, 219.0, M, 10.6, N, 5.5, M * 69'] ... т.е. непрерывный поток предложений NMEA 0183 для обработки. Что еще более любопытно, мне даже не нужно добавлять данные в переменную, содержащую полученную дату, в соответствии с примерами, которые я видел:
while True:
msg = sock_net.recv(100)
full_msg += msg.decode("utf-8")
""" Do something """
full_msg = ''
Итак, в чем моя проблема? Я просто не понимаю, что происходит. Что именно здесь делает буфер? Что происходит с данными, передаваемыми за пределы размера буфера, кажется, не имеет значения, какой размер я его установил, он все еще работает ?: Я просто обрабатываю данные в буфере? И так далее. Я ожидал дискретных пакетов информации или, по крайней мере, чего-то, что укажет Python, когда выполнять l oop.
Это очень умно. Я получаю нужные данные с нужной скоростью, но ... кто-нибудь ... что на самом деле происходит?