Nano Hash - криптовалюты, майнинг, программирование

TypeError: требуется байтовый объект, а не 'str'

Я пытаюсь создать модель клиент-сервер, будучи новичком в сетевом программировании на Python. Я застрял в ошибке, в которой говорится следующее: -

tcpCliSoc.send('[%s] %s' % (bytes(ctime(), 'utf_8'), data)) TypeError: требуется байтовый объект, а не 'str'

Вот реализация сервера и клиента

Реализация TCP-сервера

from socket import *  
from time import ctime

HOST = ''  
PORT = 21572  
ADDR = (HOST, PORT)  
BUFFSIZE = 1024  

tcpSerSoc = socket(AF_INET, SOCK_STREAM)

tcpSerSoc.bind(ADDR)
tcpSerSoc.listen(5)

while True:  
    print("waiting for connection......")  
    tcpCliSoc, addr = tcpSerSoc.accept()  
    print("connected from", addr)  

    while True:  
        data = tcpCliSoc.recv(BUFFSIZE)
        if not data:
            break
        tcpCliSoc.send('[%s] %s' % (bytes(ctime(), 'utf_8'), data))
    tcpCliSoc.close()
tcpSerSoc.close()

Реализация клиента TCP

from socket import *

__author__ = 'Lamer'

HOST = 'localhost'
PORT = 21572
ADDR = (HOST, PORT)
BUFFSIZE = 1024

tcpCliSoc = socket(AF_INET, SOCK_STREAM)
tcpCliSoc.connect(ADDR)

while True:
    data = input('>')
    if not data:
        break
    tcpCliSoc.send(data.encode())
    data = tcpCliSoc.recv(BUFFSIZE)
    if not data:
        break
    print(data.decode(encoding='utf-8'))

tcpCliSoc.close()

  • Кроме того, вы должны использовать sock.sendall() вместо sock.send() :) 03.03.2016

Ответы:


1

Интерполяция строк создает строку, а не объект байтов:

>>> '%s foo' % b'bar'
"b'bar' foo"

(Обратите внимание, что результат имеет тип str -- и в нем есть 'b' и вставлены некоторые кавычки, которые вам, вероятно, не нужны).

Вы, вероятно, хотите интерполировать байты с байтами:

>>> b'%s foo' % b'bar'
b'bar foo'

Или в вашем коде:

tcpCliSoc.send(b'[%s] %s' % (bytes(ctime(), 'utf_8'), data))
03.03.2016

2

В соответствии

tcpCliSoc.send('[%s] %s' % (bytes(ctime(), 'utf_8'), data))

параметр '[%s] %s' % (bytes(ctime(), 'utf_8'), data) является строкой, а не массивом байтов. Несмотря на то, что вы используете объект bytes для второго заполнителя строки, общая отформатированная строка «[бла] бла» является строкой. Вы должны быть в состоянии исправить это довольно легко с помощью чего-то вроде:

message_str = '[%s] %s' % (bytes(ctime(), 'utf_8'), data)
message_bytes = message_str.encode(utf-8)
tcpCliSoc.send(message_bytes)
03.03.2016

3

Я использую Python 3.5.1 и столкнулся с проблемой отправки и получения данных. Я решил ошибку «TypeError: строковый аргумент без кодировки», добавив кодировку как на сервер, так и на клиент.

# Server Code:
while True:
    data = c.recv(1024)
    if not data:
        break;
    print("from connected user:"+ str(data))
    data = str(data).upper()
    print("Sending :"+ str(data))
    byte_message = data.encode()
    c.send(byte_message)
c.close()
# Client Code:
while(message != 'q'):
    fmessage = message.encode()
    s.send(fmessage)
    data = s.recv(1024)
    print("Recieved from server :" + str(data))
    message = input()
s.close()

Наслаждаться !!!

Дхармендра

16.06.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..