Python sendto错误TypeError:必须是str,而不是字节

时间:2017-01-09 20:55:01

标签: python

我已经查看了其他已回答的问题,我发现的唯一解决方案是它需要将其编码发送。但无论是否编码,我仍然会收到此错误。有任何想法吗???注释行是我删除以使其按预期运行的行。我对此很陌生,所以希望这个问题有道理。(我使用的是3.6版本)

Host = servershost
Port = 12345

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((Host, Port))
s.setblocking(0)

rT = threading.Thread(target=receiving, args=("RecvThread", s))
rT.start()

message = input(Username + ": ")
#s.sendto(message)
while message != 'q':
    if message != '':
         s.sendto(Username + message.encode('utf-8'), server)
    #tlock.aquire()
    message = input(Username + ': ')
    tlock.release()
    time.sleep(0.2)

shutdown = True
rT.Join()
s.close()

1 个答案:

答案 0 :(得分:0)

socket对象需要一个bytes(二进制)对象,而不是一个字符串(至少在Python 3中)。

因此,只需编码两个字符串,结果就是bytes对象:

s.sendto((Username + message).encode('utf-8'), server)