开发者学堂课程【Python入门 2020年版:面向对象的服务器封装】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10481
面向对象的服务器封装
用面向对象的服务器分装的方法编写代码
import socket
class MyServer(object):
def_init_(self,ip,port):
self.socket= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.socket.bind((ip,port))
self.socket.listen(128)
def run_forever:
while True
:
client_socket,client_addr=self.socket.accept()
data=client_socket.recv(1024).decode(‘utf8’ )
path=
’ ’
if data:
path=data.splitlines()[0].split(
‘ ’)[1]
print(
‘请求的路径是{}’.format(path))
response_body=’hello world’
response_ header = 'HTTP/1.1 200 OK\n'
if path ==
‘/login' :
response_ body =
'欢迎来到登录页面'
elif path == '/register':
response_ body =
'欢迎来到注册页面'
elif path == '/':
response_ body =
'欢迎来到首页'
else:
response_ header = 'HTTP/1.1 404 Page Not Found\n'
#响应头写完要换行,注意“\n”
response_ body =
'对不起,您要查看的页面不存在!!!'
response_ header += 'content-type:text/html ;
’charset=utf8\n’
response_ header +=’\n’
response=response_header+response_body
client_ socket.send(response .encode('utf8'))
server=MyServer(‘0.0.0.0’,9090)
现在相当于有两个代码,我创建了一个 MyServer 这样一个 Server 对象,里面有一个 run_forver 方法来运行这个代码。
然后再加上 server.run_forever(),把刚才的一堆代码变成面向对象的函数。
import socket
class MyServer(object):
def_init_(self,ip,port):
self.socket= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.socket.bind((ip,port))
self.socket.listen(128)
def run_forever:
while True
:
client_socket,client_addr=self.socket.accept()
data=client_socket.recv(1024).decode(‘utf8’ )
path=
’ ’
if data:
path=data.splitlines()[0].split(
‘ ’)[1]
print(
‘请求的路径是{}’.format(path))
response_body=’hello world’
response_ header = 'HTTP/1.1 200 OK\n'
if path ==
‘/login' :
response_ body =
'欢迎来到登录页面'
elif path == '/register':
response_ body =
'欢迎来到注册页面'
elif path == '/':
response_ body =
'欢迎来到首页'
else:
response_ header = 'HTTP/1.1 404 Page Not Found\n'
response_ body =
'对不起,您要查看的页面不存在!!!'
response_ header += 'content-type:text/html ;
’charset=utf8\n’
response_ header +=’\n’
response=response_header+response_body
client_ socket.send(response .encode('utf8'))
server=MyServer(
‘0.0.0.0’,9090)
server.run_forever()
这个就是把之前的一堆代码分装成对象,这个对象在创建的时候,需要一个 ip 地址和端口号,然后我把这个 socket创建给到这个对象,之后绑定端口号然后 listen,run_forever 就是不断监听,现在运行后访问 localhost:9090显示“欢迎来到首页”。
服务器是一个死循环,不断处理请求,请求路径和打印请求路径可以删掉了,这就是使用面向对象的方法,自己写了一个服务器,还是很厉害的。