python web编程开发基础:通过socket实现网络通信


如果想要搞懂python web编程开发的原理,需要从底层socket说起。

一、socket是什么?

socket是套接字对象,简单讲就是端点,是需要通信的两个程序端点。比如一个端点是你的计算机(我们通常称为客户端),一个端点是网站所在的服务器(我们通常称为服务端)。两个端点如果想通信,就需要借助socket对象来实现。

理论上讲,我们需要为客户端编写一个socket程序,用于向服务器端发送请求,并接收返回的信息。还需要为服务器端编写一个socket程序,用于接收客户端的消息,并返回信息。

二、socket编程代码解读

客户端的socket程序无需我们手动编写,浏览器已经为我们封装好了。下面演示如何通过python的socket模块,编写简单的web框架,实现基于socket对象的web应用网络通信。

1、引入socket模块,socket模块是python自带的标准模块,直接引入就好。

import socket

2、生成套接字对象(两个参数,第一个是用于IPv4 internet寻址,第二个参数是套接字类型,web应用基于http协议,传输控制协议需要选择面向流的传输,故而参数要选择SOCK_STREAM)

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

3、设置需要绑定的服务器IP和端口号(这里以本机作为演示,故而IP选择为"127.0.0.1",实际应用会以服务器真实IP作为绑定IP)。

server_address = ("127.0.0.1", 8001)

4、将socket对象绑定IP和端口

sock.bind(server_address)

5、调用listen()方法将该套接字对象设置为服务模式,括号中的参数是在后台排队的最大连接数,如果超过了,服务端会拒绝连接新客户。

sock.listen(5)

6、调用accept()方法,等待连接的请求申请。该方法返回值为一个打开的连接和对方的IP地址

connection, address = sock.accept()

7、设置服务端可接收的信息字节数

connection.recv(1024)

8、收到请求连接后,基于http协议格式发送消息给对方

connection.send(b"HTTP/1.1 200 OK\r\n\r\n")
connection.send("浏览器的请求信息已收到,这是服务器返回的响应信息。".encode("utf-8"))

9、断开连接

connection.close()

通过以上10行代码,就完成了一个简单的python web框架(所有web框架底层都是基于socket实现)。

但是只能做一次连接,程序就结束了。可以将6-9步的代码,写到一个while循环中,就可以源源不断的接收新请求了。以下是完整的代码块。

三、完整代码块演示

import socket

# 1、生成套接字对象
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2、设置服务端的IP地址和端口
server_address = ("127.0.0.1", 8001)
# 3、绑定IP地址和端口
sock.bind(server_address)
# 4、开启监听,并设置等候最大连接数
sock.listen(5)

while True:
    # 5、等待连接的请求申请
    connection, address = sock.accept()
    # 6、设置服务端可接收的信息字节数
    connection.recv(1024)
    # 7、连接成功后,基于http协议发送消息给对方
    connection.send(b"HTTP/1.1 200 OK\r\n\r\n")
    connection.send("浏览器的请求信息已收到,这是服务器返回的响应信息。".encode("utf-8"))
    # 8、断开连接
    connection.close()

四、通过pycharm模拟服务端及浏览器演示

1、通过pycharm新建一个纯python项目,然后在根目录下新建一个server.py文件,将以上代码复制进去。
在这里插入图片描述

2、点击pycharm右上角的运行按钮。
在这里插入图片描述

3、打开浏览器,输入127.0.0.1:8001,然后摁下回车键,返回结果如下图所示,表示模拟成功。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xiaomi170/article/details/131469787
今日推荐