python套接字(《python核心编程》实例)报错

来源:互联网 发布:fgo淘宝石头号怎么用 编辑:程序博客网 时间:2024/05/16 11:36

书中的例子中报错,原因是下面的一行代码没有将字符串编码,所以将代码进行修改后代码可以正常运行。

tcpCliSock.send(data)

tcpCliSock.send(data.encode(encoding='utf-8'))

服务端

from socket import *Host=""#变量是空白的,表示可以使用任何可用的地址port=21567BUFSIZ=1024ADDR=(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=1024ADDR=(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()


0 0