TypeError: требуется объект, подобный байтам, а не кортеж - python - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь отправить файл с сервера клиенту с помощью udp. После запуска кода я вижу полученный файл в клиенте, но без расширения .txt. Если я напишу что-то в transferfile.txt, я получаю эту ошибку: TypeError: требуется байтовый объект, а не «кортеж». Как я могу его решить?

Код клиента:

import socket
import sys
import os

IP = input('enter the ip adress')
PORT = 5050
buf = 2048
ADDR = (IP,PORT)

client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

msg = 'Hello'
client.sendto(msg.encode('UTF-8'),ADDR)
with open('received_file', 'wb') as f:
    print('file opened')
    while True:
        print('receiving data...')
        data = client.recvfrom(buf)
        print('data=%s', (data))
        if not data:
            break
        # write data to a file
        f.write(data)

f.close()
print('Successfully get the file')
client.close()
print('connection closed')

Код сервера:

import socket
import sys
import os


IP = '127.0.0.1'
PORT = 5050
buf = 2048

server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server.bind((IP,PORT))

data,addr = server.recvfrom(buf)
print(str(addr) + ' says' + data.decode('UTF-8'))

filename='transferfile.txt'
f= open(filename,'rb')
l = f.read(1024)
while (l):
    server.sendto(l,addr)
    print('Sent ',repr(l))
    l = f.read(1024)
f.close()
print('Done sending')
server.close()

1 Ответ

0 голосов
/ 30 июля 2020

Необходимо декодировать полученные данные:

print('data=%s', (data.decode()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...