利用socketServer模块实现网络编程
创建服务端
# -*-coding:utf-8-*-
from socketserver import TCPServer as Tcp, StreamRequestHandler as SRH #导入正确的类
from time import ctime
HOST = 'localhost'
PORT = 8888
ADDR = (HOST, PORT)
#StreamRequestHandler类将输入输出套接字看作类似文件的对象,因此使用readline获取
class MyRequest(SRH):
def handle(self): #重写了StreamRequestHandler中的handle方法,该方法基于request中没有任何行为,当接受到来自客户端的请求时会调用handle方法。
print('connection ip is from :', self.client_address)
self.wfile.write((ctime(), self.rfile.readline()).encode())
tcpServer = Tcp(ADDR, MyRequest)
print('waiting for connection')
tcpServer.serve_forever()
# -*-coding:utf-8-*-
# 创建客户端
from socket import *
HOST = 'localhost'
PORT = 8888
ADDR = (HOST, PORT)
while True:
tcpClientSocket = socket(AF_INET, SOCK_STREAM)
tcpClientSocket.connect(ADDR)
data = input('>')
if not data:
break
tcpClientSocket.send(('%s\r\n' % data).encode())
dataa = tcpClientSocket.recv(1024)
if not dataa:
break
print(dataa.decode().strip())
tcpClientSocket.close()
"""
socketServer请求处理程序默认是接受连接,获取请求,然后关闭连接,因此无法再应用程序执行过程中保持连接,因此每次向服务器发送消息都需要创建一个套接字
因为这里处理的套接字通信就像文件一样,所以必须发送终止符\r\n,当收到服务器消息是,用strip()函数处理
"""
学习内容:
socketServer模块
学习时间:
2021年1月5日
参考文献:python核心编程