一小时前我把python核心编程里面的tcp时间戳服务器和客户端的代码录入了电脑,并且运行了,结果,意料之内的出现错误。【很正常,安慰自己】
源代码如下
Tcpserver.py
#!/usr/bin/env python
#coding = utf-8
from socket import *
from time import ctime
HOST = ‘’
PORT = 21567
BUFSIZE = 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(BUFSIZE)
if not data:
break
tcpCliSock.send('[%s] %s' %(bytes(ctime(),'utf-8'),data))
tcpCliSock.close()
tsTcpclient.py
#!/usr/bin/env python
#coding = utf-8
from socket import *
HOST = ‘127.0.0.1’
PORT = 21567
BUFSIZE = 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(BUFSIZE)
if not data:
break
print(data.decode('utf-8'))
tcpCliSock.close()
哦,在python3里面输入是以str形式保存的,于是我用decode()把输入类型改成了bytes类型
再次运行并输入数据
搞了半小时,最后是因为 tcp服务端的这段有问题
tcpCliSock.send(’[%s] %s’ %(bytes(ctime(),‘utf-8’),data))
前面的%s可能是默认了传入的是str
然后send()函数就以为后面传入的是两个str类型的数据,然后就出错
改为
tcpCliSock.send(bytes(b’[’+ctime(),‘utf-8’)+b’]’+b’:’+data))
后完美解决。
书本上的代码出现的原因有可能是一下原因:
1.书有的年代了,没有更新
2.有可能作者根本就没有运行过python3的程序,想当然了。(因为好像很多人会比较喜欢用python2)
个人的随笔加自己的见解,小白一个。有意见也憋着,我是写给自己看的。别网络暴力,这里不是微博。