美文网首页生活不易 我用python
Python Socket TypeError: a bytes

Python Socket TypeError: a bytes

作者: taking_off | 来源:发表于2018-06-25 16:06 被阅读4次

    《python核心编程》第三版,发现示例2-1代码返回错误

    发现这里python3.5和Python2.7在套接字返回值解码上有区别。

    先介绍一下 python bytes和str两种类型转换的函数encode(),decode()

    str通过encode()方法可以编码为指定的bytes

    反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

    修正后:

    tcp服务器

    from socket import *

    from time import ctime

    HOST = ''

    PORT = 22222

    ADDR = (HOST, PORT)

    BUFSIZ = 1024

    tcpSerSock = socket(AF_INET, SOCK_STREAM)

    tcpSerSock.bind(ADDR)

    tcpSerSock.listen(5)

    while True:

    print('waiting for connection...')

    tcpCliSock, addr = tcpSerSock.accept()

    print('...connected from: ', addr)

    while True:

    data = tcpCliSock.recv(BUFSIZ).decode()

    if not data:

    break

    tcpCliSock.send(('[%s] %s' %(ctime(),data)).encode())

    tcpCliSock.close()

    tcpSerSock.close()

    tcp客户端:

    from socket import *

    HOST = '127.0.0.1'

    PORT = 22222

    BUFSIZ = 1024

    ADDR = (HOST, PORT)

    tcpCliSock = socket(AF_INET, SOCK_STREAM)

    tcpCliSock.connect(ADDR)

    while True:

    data = input('> ')

    if not data:

    break

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

    data = tcpCliSock.recv(BUFSIZ)

    if not data:

    break

    print(data.decode('utf-8'))

    tcpCliSock.close()

    相关文章

      网友评论

        本文标题:Python Socket TypeError: a bytes

        本文链接:https://www.haomeiwen.com/subject/uxqbsftx.html