开发服务器的完整流程-01实现返回固定页面

# 开发服务器的完整流程

01-编写第一个服务器(实现返回固定页面)

预备知识
  1. 首先我们要清楚,当浏览器向服务器请求数据时,会发生以下两个动作

    1. 浏览器向服务器发送请求,请求的格式如代码片段1

    2. 服务器向浏览器返回响应数据(如代码片段2),这些数据渲染在浏览器上形成网页

      这也就意味着我们编写一个服务器时,需要向浏览器返回如代码片段2的数据,而并不是所有内容都要返回,我们刚开始写一个服务器,可以只返回一些必须的数据,如下所示

      HTTP/1.1 200 OK
      
      body部分
      

      分为两个部分:header 和 body部分

      body部分就是要向浏览器传输的数据

      注意:header部分和body部分必须用一个空行来链接

      话不多说,我们先开始编写一个简单的服务器吧!!

服务器----->浏览器的数据格式:

片段1
HTTP/1.1 200 OK 
Content-Length: 53 Content-Type: text/plain; 
charset=UTF-8 Date: Sat, 01 May 2021 07:53:18 GMT

浏览器----->服务器的数据格式:

片段2
b'GET / HTTP/1.1\r\nHost: 127.0.0.1:7890\r\nConnection: keep-alive\r\nsec-ch-ua: " Not A;Brand";v="99", "Chromium";v="90", "Microsoft Edge";v="90"\r\nsec-ch-ua-mobile: ?1\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Mobile Safari/537.36 Edg/90.0.818.46\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nSec-Fetch-Site: none\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-User: ?1\r\nSec-Fetch-Dest: document\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\r\n\r\n'


# 完整代码如下
import  socket

def  service_client(new_socket):
    """为这个客户端返回数据"""

    # 1.接收浏览器发送过来的请求,即http请求
    # GET / HTTP/1.1
    request = new_socket.recv(1024)

    #会打印出如代码片段1的代码,这是浏览器发送给服务器的请求
    print(request)

    # 2.返回http格式的数据,给浏览器,这是重头戏

    # 2.1 准备发送给浏览器的数据——header
    response = "HTTP/1.1 200 OK\r\n"   # 浏览器解析换行是\r\n,这里要记住,因为浏览器兼容问题,在写服务器时换行必须用“\r\n”表示
    response += "\r\n" # 换行 区分header和body部分

    # 2.2准备发送给浏览器的数据 ——body
    response += "hahahah"  #发送给浏览器的内容,也就是在浏览器要渲染出来的页面,读者可以尝试写不同数据加深理解
    new_socket.send(response.encode("utf-8"))  #send发送的必须是字节类型的数据,所以要进行utf-8编码

    # 关闭套接字
    new_socket.close()


def main():
    """用来完成整体的控制"""

    # 1.创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 2.绑定 本地IP 7890端口
    tcp_server_socket.bind(("",7890))
    # 3.变为监听套接字
    tcp_server_socket.listen(128)
    while True:
        # 4.等待新客户的链接
        new_socket , client_addr = tcp_server_socket.accept()
        # 5.为这个客户端服务
        service_client(new_socket)

    #关闭监听套接字
    tcp_server_socket.close()

if __name__== "__main__":
    main()


总结

敲黑板!!代码注释非常详细,但还是想啰嗦几句

其实整个编写服务器的流程都十分清晰,简单

  1. 创建套接字

  2. 绑定IP,端口

  3. 变为监听套接字

  4. 等待新客户的连接,并为其服务

    • 接收浏览器发送过来的请求

    • 返回给浏览器数据,包括两个部分

      header

      body

  5. 关闭套接字

好了,各位小伙伴,一个简单服务器的完整建立过程就是这样,小伙伴快去试一试吧!!

我之前看到编写服务器都是在ubuntu里面,可是每次开ubuntu都特别麻烦

所以我就尝试了在pycharm进行运行,没想到真可以

所以,以下才是重点!!!

  1. 复制完整代码到pycharm并运行
  2. 在浏览器输入127.0.0.1:7890就可以看到你发送的数据了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值