python3中,socket使用send函数时出现的错误:TypeError: a bytes-like object is required, not 'str'

来源:互联网 发布:mac 8081端口被占用 编辑:程序博客网 时间:2024/05/18 05:11

首先我实现的功能是:使用tcp协议实现单线程的QQ聊天

代码如下:

from socket import *serversocket = socket(AF_INET, SOCK_STREAM)serversocket.bind(('',7788))serversocket.listen(5)while True:clientsocket,clientaddr = serversocket.accept()while True:recvdata = clientsocket.recv(1024)if len(recvdata)>0:print("%s:%s"%(str(clientaddr),recvdata))else:breaksenddata = input("请输入数据:")clientsocket.send(senddata)clientsocket.close()serversocket.close()

运行之后,出现如下错误:

 python3 03-tcp单线程实现QQ聊天.py ('192.168.1.13', 52296):123请输入数据:asdfdTraceback (most recent call last):  File "03-tcp单线程实现QQ聊天.py", line 21, in <module>    clientsocket.send("senddata")TypeError: a bytes-like object is required, not 'str'

错误即为:类型错误:需要一个类似字节的对象,而不是str


经过查python3.5手册后,发现:

socket.send(bytes[, flags])

但是:

python中bytes和str两种类型转换的函数encode()、decode()

  • str通过encode()方法可以编码为指定的bytes
  • 如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法

将代码改正后:

clientsocket.send(senddata.encode())

即可运行成功!
阅读全文
0 0