服务器端:
from socketserver import TCPServer as TCP
from socketserver import StreamRequestHandler as SRH
from time import ctime
HOST = ''
PORT = 21567
ADDR = (HOST, PORT)
# 重写自己的RequestHandlerClass类
class MyRequestsHandler(SRH):
# override处理数据的方法,基类默认该方法为空
def handle(self):
# 打印客户端的地址信息,该信息被储存在self.client_address中
print('connected from: {}'.format(self.client_address))
#msg=self.rfile.readline().decode('utf8').encode('utf8')
msg=self.rfile.readline().decode('utf8')
print(str(msg.upper()))
# self.rfile.readline()读取客户端发送的信息(bytes类型),并解码为字符串类型
# 写入字符串类型信息,编码为bytes(此处没有send()方法)
self.wfile.write('[{}] {}'.format(ctime(), msg).encode('utf8'))
# 构造socketserver.TCPServer类,传入地址和handler方法参数
tcpServ = TCP(ADDR, MyRequestsHandler)
print('waiting for connection...')
# 开启该服务,直至中断
tcpServ.serve_forever()
客户端:
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
while True:
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
data = input('> ')
if not data:
break
# 以行终止符作为结尾,发送字符串信息并编码
tcpCliSock.send('{}\r\n'.format(data).encode('utf8'))
# 接收服务端传回的数据并解码
data = tcpCliSock.recv(BUFSIZ).decode('utf8')
if not data:
break
print(data.strip())
tcpCliSock.close()