总之,这种错误是以为网络编程发送的函数的参数都是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'))
发现即可运行