Проблема кодирования при печати сообщения на UDP-клиент-сервер с использованием Python - PullRequest
2 голосов
/ 26 февраля 2020

Я пытаюсь создать клиент-сервер UDP из TCP-сервера. У меня возникла проблема с кодированием и печатью полученного сообщения с сервера на клиент. Он работает так же, как у меня в 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

Я не уверен, почему ???

1 Ответ

0 голосов
/ 27 февраля 2020

socket.recvfrom возвращает кортеж пары (байты, адрес) в UDP, поэтому мне пришлось декодировать первый элемент байтов. Вот как я это сделал.

command = str(sock.recvfrom(BUFFER_SIZE)[0], "utf-8"). [0] берет первый элемент в кортеже BUFFER_SIZE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...