在Python核心编程(第3版)第2章网络编程中,
关于tcp/udp服务器和客户端实现代码的运行会出现
【’str’ does not support the buffer interface】之类的错误,
现将自己学习过程中的修正代码粘贴如下:
【TCP服务器/客户端】
# TCP_server.pyfrom socket import *from time import ctimeHOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)tcpSerSock = socket(AF_INET, SOCK_STREAM)tcpSerSock.bind(ADDR)tcpSerSock.listen(5)i = 0while True:print('Waiting for connection...')tcpCliSock, addr = tcpSerSock.accept()print('...connected from:', addr)while True:data = tcpCliSock.recv(BUFSIZ).decode()print(type(data))print(type(data.encode()))print(type(ctime()))if not data:i = 1breaktcpCliSock.send(('[%s] %s' % (ctime(), data)).encode())tcpCliSock.close()if i == 1:breaktcpSerSock.close()
# TCP_client.pyfrom socket import *HOST = 'localhost'PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)tcpCliSock = socket(AF_INET, SOCK_STREAM)tcpCliSock.connect(ADDR)while True:print('Input something...')data = input('>>>>>')if not data:breaktcpCliSock.send(data.encode())data = tcpCliSock.recv(BUFSIZ).decode()if not data:breakprint(data)tcpCliSock.close()
【UDP服务器/客户端】
# UDP_server.pyfrom socket import *from time import ctimeHOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)udpSerSock = socket(AF_INET, SOCK_DGRAM)udpSerSock.bind(ADDR)while True:print('waiting for message...')data, addr = udpSerSock.recvfrom(BUFSIZ)if not data:breakudpSerSock.sendto(('[%s] %s' % (ctime(), data.decode())).encode(), addr)print('...received from and returned to:', addr)udpSerSock.close()
# UDP_client.pyfrom socket import *from time import ctimeHOST = 'localhost'PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)udpCliSock = socket(AF_INET, SOCK_DGRAM)while True:print('Input something...')data = input('>')if not data:breakudpCliSock.sendto(data.encode(), ADDR)data, ADDR = udpCliSock.recvfrom(BUFSIZ)if not data:breakprint(data.decode())udpCliSock.close()
Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正