类型错误:需要一个类似字节的对象,而不是“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()

原文由 Payas Pandey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 785
2 个回答

字符串插值是创建一个字符串,而不是字节对象:

 >>> '%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))

原文由 mgilson 发布,翻译遵循 CC BY-SA 3.0 许可协议

我正在使用 Python 3.5.1 并面临发送和接收数据的问题。我通过向服务器和客户端添加编码解决了错误“TypeError: string argument without an encoding”。

 # 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()

享受 !!!

法门陀罗

原文由 Dharmendra SundarSingh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题