手动实现一个简单的网站服务器
'''
网站搭建流程
用户通过浏览器向网站服务器发送一个请求
当我们的网站服务器接收到请求后
返回页面数据
如何使用python向浏览器发送数据?
socket
网络模型
tcp
在互联网中可以发送/接收数据
微信 qq 信息传输原理全是基于tcp这个模型
可以运用在网站上的
客户端
接收数据 -----> 浏览器
服务端
发送数据 ----> python socket
udp
直播网站平台的
视频流 udp去发送
'''
import socket
# 创建一个新的函数 发送数据
def service_client(new_socket):
# 1. 当浏览器连接到网站服务器的时候 首先向服务器发送一些数据
'''
http 协议信息
所有的网站全部都是基于http协议去搭建的
:param new_socket:
:return:
'''
request = new_socket.recv(1024)
print(request)
# 2. 向浏览器发送http数据
response = 'HTTP/1.1 200 OK \r\n'
response += '\r\n'
# 写出你想要发送的数据
response += 'hello world'
# 将数据发送出去
# 发送的数据一定要指定一个编码集
new_socket.send(response.encode('utf-8'))
# 当服务完成之后 需要释放系统资源
new_socket.close()
# 声明一个tcp网络模型的函数
def main():
# 1.创建一个tcp套接字 [套接字就是专门负责与浏览器链接的一种对象]
'''
在socket方法中 需要传入两个参数
网络协议
ipv4 ipv6
网络模型的类型
tcp
:return:
'''
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 当网站服务终止时 需要释放电脑端口资源
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 3. 绑定本机信息
'''
传入的值是一个元组
因为不光光需要电脑的ip地址
还需要网站运行的端口值
'''
tcp_server_socket.bind(('', 80))
# 需要将网站设置成监听模式
'''
等待浏览器链接
直到浏览器链接成功
128最大连接数
'''
tcp_server_socket.listen(128)
# 网站服务 显示你想要显示的内容
while True:
# 循环服务
'''
需要去声明一个新的套接字
因为旧套接字被占用了
当浏览器去链接网站服务的时候
已经在工作了
新的套接字负责发送/接收数据
'''
new_socket, client_addr = tcp_server_socket.accept()
'''
new_socket: 是新的套接字对象
client_addr: 浏览器访问网站服务器时, 向网站服务器发送一组数据
浏览器所在电脑的ip地址和端口
'''
# 使用新的套接字去发送数据 拆分成一个新的函数
service_client(new_socket)
if __name__ == '__main__':
main()