书中的例子中报错,原因是下面的一行代码没有将字符串编码,所以将代码进行修改后代码可以正常运行。
tcpCliSock.send(data)
tcpCliSock.send(data.encode(encoding='utf-8'))
服务端
from socket import *
Host=""#变量是空白的,表示可以使用任何可用的地址
port=21567
BUFSIZ=1024
ADDR=(Host,port)
tcpSerSock=socket(AF_INET,SOCK_STREAM) #分配了TCP套接字
tcpSerSock.bind(ADDR)
#将套接字绑定到服务器地址以及开启TCP监听器的调用
tcpSerSock.listen(5)
#连接被转接或者拒绝之前,传入请求的最大连接数
while True:
#等待服务器的连接,如果消息是空白的,意味着客户端已经退出
print("waiting for connection")
tcpCliSock,addr=tcpSerSock.accept()
print('connectin from:',addr)
while True:
data=tcpCliSock.recv(BUFSIZ).decode('utf-8')
print("the client says: ",data)
if not data:
break
tcpCliSock.send(data.encode(encoding='utf-8'))
tcpCliSock.close()
tcpSerSock.close()
客户端
from socket import *
HOST='localhost'#主机名
POST=21567#端口号,应该与服务端的端口号相同
BUFSIZ=1024
ADDR=(HOST,POST)
tcpCliSock=socket(AF_INET,SOCK_STREAM)#分配了套接字
tcpCliSock.connect(ADDR)
while True:
data=input('>')
if not data:
break
tcpCliSock.send(data.encode(encoding='utf-8'))
data=tcpCliSock.recv(BUFSIZ)
if not data:
break
print(data.decode('utf-8'))
tcpCliSock.close()