版权声明:本文为博主原创文章,未经博主允许不得转载。 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())