02-返回固定数据版本

目标

  • 能够实现简单的Web服务器并返回固定数据给浏览器

image-20180727132850405

1. 实现效果:

image-20180711223037272

image-20180711223310798

2. 整体功能:

1、Web服务器能够绑定固定端口

2、Web服务器端能够接收浏览器请求

3、Web服务器遵守HTTP协议,并返回“HelloWrold”字符串给浏览器

4、当浏览器关闭后,Web服务器能够显示断开连接

5、Web服务器短时间内重启,不会提示 address already in use 错误

3. 实现步骤

1、导入socket模块

2、创建tcp套接字

3、设置地址重用

4、绑定端口

5、设置监听,最大允许客户端连接数128(套接字有主动变为被动)

6、等待客户端连接(能够接受多个客户端连接)

7、定义函数,实现客户端信息接收和响应

8、接收浏览器请求,并判断请求是否为空

9、拼接响应报文

10、定义变量保存响应报文内容

11、发送响应报文给客户端浏览器

12、关闭此次连接的套接字

4. 代码实现

import socket


def request_handler(new_client_socket):
    """ 响应客户端请求的核心函数 """
    request_data = new_client_socket.recv(1024)
    # 判断客户端是否已经断开链接
    if not request_data:

        print("客户端已经断开连接!")
        # 关闭当前连接
        new_client_socket.close()

        # 退出,代码不再向后执行
        return

    # 开始拼接响应数据
    response_line = "HTTP/1.1 200 OK\r\n"
    response_header = "Server:Python-Web1.0\r\n"
    response_blank = "\r\n"
    response_content = "HelloWorld!"

    # 拼接响应头
    response_data = response_line + response_header + response_blank + response_content

    # 发送数据
    new_client_socket.send(response_data.encode())

    # 关闭socket
    new_client_socket.close()


def main():

    # 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定IP 和端口
    tcp_server_socket.bind(("", 8080))

    # 设置套接字为被动套接字,主要接收客户端链接
    tcp_server_socket.listen(128)

    while True:
        # 接受客户端链接
        new_client_socket, ip_port = tcp_server_socket.accept()

        print("[新客户端上线]", ip_port)

        # 相应客户端请求,发送数据给客户端
        request_handler(new_client_socket)


if __name__ == '__main__':

    main()

通过开发工具调试此次请求

image-20180711223129553

能够看到服务器响应的数据

image-20180711223159028