python网络编程 TypeError: a bytes-like object is required, not 'str' 以及同时运行客户端和服务端

总之,这种错误是以为网络编程发送的函数的参数都是byte类型,改成这类型就好,

先放源代码

服务器端源代码为:

from socket import *
from time import ctime

HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

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)
        if not data:
            break
        tcpCliSock.send('[%s] %s' % (
		bytes(ctime(), 'utf-8'), data))

    tcpCliSock.close()

tcpSerSock.close()

客户端源代码为:

from socket import *

HOST = 'localhost'
PORT = 21567
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)
    data = tcpCliSock.recv(BUFSIZ)
    if not data:
        break
    print(data.decode('UTF_8'))

tcpCliSock.close()

一开始是直接用F5运行程序,但是发现运行了客户端服务端就会自己关闭,所以运行方法为找到程序所在文件夹

然后再这里输入cmd

打开两个命令端口后一个输入python tsTserv3.py。 一个输入 python tsTclnt3.py。但是在客户端继续输入时报错

首先可以看到是在客户端的十五行代码,有错误提示可知,这里应该使用byte类型而不是str类型,所以十五行代码改为

tcpCliSock.send(data)  》》》  tcpCliSock.send(bytes(data, 'UTF-8'))

然后继续执行,发现客户端输入hi后没有返回,并且有错误提示可知这是服务端第22行发生错误,且错误理由相同,所以修改服务端代码

tcpCliSock.send('[%s] %s' % (      bytes(ctime(), 'utf-8'), data))  》》》》

tcpCliSock.send(bytes('[%s] %s' % (ctime(), data.decode('utf-8')), 'utf-8'))

发现即可运行

猜你喜欢

转载自blog.csdn.net/qq_38115310/article/details/82784615