【发布时间】:2020-02-26 18:32:17
【问题描述】:
我正在尝试从 TCP 创建一个 UDP 客户端服务器。我在编码和打印从服务器到客户端的接收消息时遇到了问题。它的工作方式与我在 TCP 上的方式相同,但似乎不适用于 UDP,而且我不确定我还需要编码什么?
这是我得到的错误:
File "/Users/PycharmProjects/UDPProject/client.py", line 29, in <module>
print("received %s" % command)
TypeError: not all arguments converted during string formatting
这是我的客户端代码,其中删减了一些代码。
while True:
message = input("Please enter a command:\n") # ask user to input message
if message == 'quit':
break
if len(message) == 0:
print("Please enter something")
message = input("Please enter a command:\n")
print("Sending %s" % message)
sock.sendto((message.encode("utf-8")), address) # send message
command = str(sock.recvfrom(BUFFER_SIZE), "utf-8")
print("received %s" % command)
print("closing connection with server")
sock.close()
当套接字尝试从 utf-8 格式的缓冲区大小接收并且我尝试打印它时,就会发生这种情况。
编辑:我修复了错误,它只是 lenz 概述的错字,但现在它给了我这个错误
command = str(sock.recvfrom(BUFFER_SIZE), "utf-8")
TypeError: decoding to str: need a bytes-like object, tuple found
我不知道为什么???
【问题讨论】:
-
command是一个元组,因为有错字。将command = str(sock.recvfrom(BUFFER_SIZE)), "utf-8"更改为command = str(sock.recvfrom(BUFFER_SIZE), "utf-8"),即。将最后一个右括号移到行尾。 -
@lenz 谢谢,但现在它给了我一个错误说:
line 28, in <module> command = str(sock.recvfrom(BUFFER_SIZE), "utf-8") TypeError: decoding to str: need a bytes-like object, tuple found -
嗯,是的,docs 说
socket.recvfrom返回一对(bytes, address),所以你只需要解码第一个项目。 -
@lenz 嗯好的谢谢你我想通了,我会发布我的解决方案
标签: python encoding utf-8 udp client