Python3.6套接字UDP客户端由于类型错误而无法发送数据“TypeError:需要类似字节的对象,而不是'str'

时间:2018-04-02 00:43:59

标签: udp python-3.6

我有这个代码从Arduino串行获取数据。我希望能够对即将发布的数据执行数学运算,然后将数据发送到服务器,但是将数据更改为TypeError中的数据。我试图使这个代码主要在Python3.6中工作。

import socket
import serial
from time import sleep

IP = "192.168.1.1"
PORT = 3553

ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
print(ser.name)

while True:

    data = str(str(ser.read(7))[2:9].replace("r","").replace("n","").replace("\\","")).split(",")
#   data = str(ser.read(7))
    line = ser.readline()

    clientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    clientSock.sendto(data[0], (IP, PORT))

这是错误。

$ sudo python3.6 udp_client.py
/dev/ttyUSB0
Traceback (most recent call last):
  File "udp_client.py", line 18, in <module>
    clientSock.sendto(data[0], (IP, PORT))
TypeError: a bytes-like object is required, not 'str'

有人说这可能是this link的副本,但投票最多的答案只适用于Python2,之前我已经看过这个问题,而且它的答案都没有解决我的问题。

1 个答案:

答案 0 :(得分:0)

socket只能发送bytes-like个对象。您的数据为str,因此您应该通过某种方式将其编码为bytes 尝试替换此行中的第一个str

data = str(str(ser.read(7))...

进入bytes再次运行。

data = bytes(str(ser.read(7))...

这使用UTF-8作为默认编码类型。