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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wx1458451310/article/details/78593994

首先我实现的功能是:使用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:
			break

		senddata = input("请输入数据:")
		clientsocket.send(senddata)

	clientsocket.close()

serversocket.close()

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

 python3 03-tcp单线程实现QQ聊天.py 
('192.168.1.13', 52296):123
请输入数据:asdfd
Traceback (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())

即可运行成功!

猜你喜欢

转载自blog.csdn.net/wx1458451310/article/details/78593994