【问题标题】:Encoding problem when printing message in UDP client-server using Python使用 Python 在 UDP 客户端-服务器中打印消息时的编码问题
【发布时间】: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 &lt;module&gt; 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


【解决方案1】:

socket.recvfrom 在 UDP 中返回一对(字节,地址)的元组,所以我必须解码第一项字节。我就是这样做的。

command = str(sock.recvfrom(BUFFER_SIZE)[0], "utf-8")。 [0] 抓取BUFFER_SIZE 元组中的第一项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2015-02-25
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多