在树莓派上使用 pythn 3 的 Python 行为真的很奇怪(3B+)

时间:2021-01-24 08:53:03

标签: python windows raspberry-pi

我正在尝试接收消息并添加错误更正,我在 pi 上使用 unireedsolomon 和 python 3.7.3,在我的主机上使用 3.8.3,我在 pi 上收到此错误,而在我的 Windows 计算机上它可以工作很好:

Traceback (most recent call last):
  File "server.py", line 53, in <module>
    recv = read_rs(recv)
  File "server.py", line 36, in read_rs
    packet1 = coder.decode(packet1).encode()
  File "/home/pi/.local/lib/python3.7/site-packages/unireedsolomon/rs.py", line 294, in decode
    ret = self._list2str(ret)
  File "/home/pi/.local/lib/python3.7/site-packages/unireedsolomon/rs.py", line 493, in _list2str
    return ''.join(chr(x) for x in L)
TypeError: 'NoneType' object is not iterable

sockets 用于从 gnuradio 获取消息

unireedsolomon 来解码读取 solemen 编码

我的代码:

# first of all import the socket library
import socket
import struct
import array
import zlib
import unireedsolomon as rs
coder = rs.RSCoder(25, 15)
# next create a socket object
s = socket.socket()
print ("Socket successfully created")
port = 25565

s.bind(('', port))
print ("socket binded to %s" %(port))
# put the socket into listening mode
s.listen(5)
print ("socket is listening")
def check_packet(packet):
    packet = bytes(packet)
    id = packet[-2:-1]
    crc = packet[-6:-2]
    crc2 = zlib.crc32(packet[:-6]).to_bytes(4,'big')
    print(crc.hex(),crc2.hex())
    if crc == crc2:
        return id[0]
    else:
        return 255
def read_rs(packet1):
    packet1 = packet1[:-1]
    packet1 = coder.decode(packet1).encode()
    packet1.append(bytes([0]))
    return packet1
while True:
    c, addr = s.accept()
    connected = True
    recv = []
    data1 = []
    i = 0
    while connected:
        try:
            a = c.recv(4)
            data = int(struct.unpack('<f',a)[0])
            recv += bytes([data])
            print(data)
            if data  == 0:
                print(recv)
                recv = read_rs(recv)
                print(recv)
                correct = check_packet(recv)
                if correct != 255:
                    print("packet:",bytes(recv[:-6]).decode(),"number of packet:",correct)
                    while len(data1) < i:
                        data1.append('')
                    while len(data1) > correct:
                        print(''.join(data1))
                        data1 = []
                    data1.append(bytes(recv[:-6]).decode())
                    i = correct
                    print("partial data:",''.join(data1))
                else:
                    print("invaild packet, ignored")
                recv = []
        except:
                raise

0 个答案:

没有答案
相关问题