极简 demo tcp服务器面向函数编程 python

原创 2018年04月17日 11:40:17
import re
import socket


def init_tcp_server():
    """创建一个服务器"""
    # 服务器tcp服务器对象
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 设置我们的端口地址重用
    tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # 绑定端口号
    tcp_server.bind(("", 7890))
    # 改成被动模式
    tcp_server.listen(True)

    return tcp_server


def client_exec(client):
    """客户端处理"""
    # 接收数据
    # 处理请求头,获取我们请求的地址
    # 根据不同的地址返回不同的网页
    # 结束

    # 接收数据
    data = client.recv(1024).decode()
    # 处理请求头,获取我们请求的地址
    # 请求格式 GET /地址 HTTP/1.1,我只要第一行
    try:
        request_head = data.splitlines()[0]
        # 正则去获取地址
        re_ret = re.match(r'[^/]+(/[^ ]*)', request_head)
        # 判断结果
        if re_ret:  # 匹配到了
            # 要一个地址
            file_name = re_ret.group(1)
            # 只有一个/
            if file_name == "/":
                file_name = "/index.html"  # 首页
    except Exception as e:
        print(e)  # 记录日志中(文件)
    # 做的好一点
    # 有可能后期做很多处理
    try:
        # 根据不同的地址返回不同的网页
        # 打开文件(html)
        with open("./html%s" % file_name, 'rb') as f:  # 打开文件有可能是有图片跟文字的
            content_html = f.read()

        # 把特定的格式发过去
        # 响应头
        # 空行
        # 响应体

        heads = "HTTP/1.1 200 OK\r\n"
        heads += "\r\n"

        client.send(heads.encode("utf-8"))  # 发头
        client.send(content_html)  # 发体
    except Exception as e:
        # 没有这个文件
        heads = "HTTP/1.1 404 NOT FOUND\r\n"
        heads += "Content-Type:text/html;charset=utf-8\r\n"
        heads += "\r\n"
        body = "亲,您的网页已走迭!"

        content = heads + body

        client.send(content.encode("utf-8"))

    # 结束
    client.close()


def run_server(server):
    """运行服务器"""
    while True:
        # 接收客户端
        client, addr = server.accept()
        # 处理客户端请求
        client_exec(client)


def main():
    # 创建一个服务器为浏览器工作  ctrl+B
    # 1.需要一个服务器
    server = init_tcp_server()
    # 2.运行这个服务器
    run_server(server)


if __name__ == '__main__':
    main()



极简运维,无限扩容——Serverless Monitoring技术公开课

-
  • 1970年01月01日 08:00

极简的centos-git服务器搭建,供windows用户使用

搭建git服务器  reference:http://blog.csdn.net/zhuxiaoping54532/article/details/53813437 目标: 在远程Linux...
  • limanjihe
  • limanjihe
  • 2017-11-15 17:32:39
  • 413

谈谈我对极简主义的看法

其实刚开始接触到极简主义是在知乎上,当时看到一张图,是一个答主拍的自己的房间,房间简洁到极致,床,桌子,电脑,衣架,一切显得干净而利落。于是觉得突然就觉得极简主义真他妈好啊,简而有序,带着一种特殊的美...
  • code_vs
  • code_vs
  • 2017-08-09 23:34:12
  • 643

Kotlin极简教程

  • 2017年09月20日 11:04
  • 14.97MB
  • 下载

《Kotlin极简教程》第一章 Kotlin简介

最新上架!!! 《 Kotlin极简教程》 陈光剑 (机械工业出版社): https://mp.weixin.qq.com/s/bzRkGSO6T1O2AELM_UqKUQ fun max(a: ...
  • universsky2015
  • universsky2015
  • 2017-09-13 14:24:09
  • 540

《斯坦福极简经济学》读书笔记

需求弹性:需求量变 Conflicting modification on 2017年1月28日 下午1:47:50: 琼·罗宾逊:研究经济学的理由就是“为了避免被经济学家欺骗” ...
  • koalacoco
  • koalacoco
  • 2017-02-28 15:02:56
  • 1151

极简人类史

  • 2017年03月05日 11:00
  • 5.7MB
  • 下载

函数式编程和面向对象编程的区别和优劣

是什么 在叙述区别和优劣之前,简单介绍一下两者。 函数式编程,顾名思义,这种编程是以函数思维做为核心,在这种思维的角度去思考问题。这种编程最重要的基础是λ演算,接受函数当作输入和输出。 面向对象...
  • HXCURTAIN
  • HXCURTAIN
  • 2017-08-27 11:19:04
  • 1880

迅雷极简版

  • 2017年12月21日 09:52
  • 22.6MB
  • 下载

《Kotlin极简教程》

下载地址
  • qq_34476727
  • qq_34476727
  • 2017-09-29 11:11:52
  • 710
收藏助手
不良信息举报
您举报文章:极简 demo tcp服务器面向函数编程 python
举报原因:
原因补充:

(最多只允许输入30个字)