直接上代码:

from multiprocessing import Process

import re

import socket

HTML_ROOT_DIR = "./html"

class HTTPServer(object):

"""服务器"""

def __init__(self):

self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# self.server_socket.bind("", port)

def start(self):

"""开启服务器"""

self.server_socket.listen(128)

while True:

client_socket, client_addr = self.server_socket.accept()

print("[%s, %s]用户连接上了..." % client_addr)

handle_client_process = Process(target=self.handle_client, args=(client_socket,))

handle_client_process.start()

client_socket.close()

def handle_client(self, client_socket):

"""处理客户端请求"""

request_data = client_socket.recv(1024)

print("request_data: ", request_data)

request_lines = request_data.splitlines()

for line in request_lines:

print(line)

request_start_line = request_lines[0]

file_name = re.match(r"\w+ +(/[^ ]*) ", request_start_line.decode("utf-8")).group(1)

if "/" == file_name:

file_name = "/index.html"

try:

file = open(HTML_ROOT_DIR + file_name, "rb")

except IOError:

response_start_line = "HTTP/1.1 404 Not Fount\r\n"

response_head_line = "server: My server\r\n"

response_body = "The File is not Found!"

else:

file_data = file.read()

file.close()

response_start_line = "HTTP/1.1 200 OK\r\n"

response_head_line = "Server: My server\r\n"

response_body = file_data.decode("utf-8")

finally:

response = response_start_line + response_head_line + "\r\n" + response_body

print("response data: ", response)

client_socket.send(bytes(response, "utf-8"))

client_socket.close()

def bind(self, port):

self.server_socket.bind(("", port))

def main():

http_server = HTTPServer()

http_server.bind(8000)

http_server.start()

if __name__ == "__main__":

main()

python实现http协议_python使用socket实现TCP支持HTTP协议的静态网页服务器相关推荐

  1. udp协议没有粘包问题、基于socketserver实现并发的socket(基于tcp、udp协议)、基于udp协议的套接字、操作系统原理以及进程知识

    基于udp协议的套接字通信服务端 from socket import *server=socket(AF_INET,SOCK_DGRAM) #数据报协议->udp server.bind((' ...

  2. Socket、TCP和UDP协议、端口含义

    1.如何理解Socket 两台计算机相互通讯靠的就是Socket,类似于2个人通讯要靠电话,也就是说Socket就是程序之间的电话.Socket英文意思是孔.插座,作为进程通讯机制,取后一种意思,通常 ...

  3. python远程调用摄像头_Python设置Socket代理及实现远程摄像头控制的例子

    为python设置socket代理首先,你得下载SocksiPy这个.解压出来之后里面会有一个socks.py文件.然后你可以把这个文件复制到python安装目录里面的Lib\site-package ...

  4. python实现文件传输_Python使用socket实现简单的文件传输并校验

    因为工作需要,要在两台设备之间进行压力测试.即A设备不断往B设备发送文件,B设备接收文件后校验文件是否正确接收. 用Python的socket模块写了简单的Server和Client脚本.Server ...

  5. python传输大文件_python之socket运用之传输大文件

    socket建议最大的传输单元是8192个字符,但是如果超过8192就会出现问题,我们可以用下面的方法处理 客户端代码 import subprocess import socket ip_bind ...

  6. python socket客户端_python 使用socket模拟tcp客户端和tcp服务器端

    ''' 客户端代码 ''' import socket #创建套接字 tcpClientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREA ...

  7. python接入讯代理_python实现简单的TCP代理服务器

    本文实例讲述了python实现简单的TCP代理服务器的方法,分享给大家供大家参考. 具体实现代码如下: # -*- coding: utf-8 -*- ''' filename:rtcp.py @de ...

  8. [网络协议]:如何验证DNS服务器是否支持dnssec协议

    众所周知,DNSSEC对于DNS劫持虽然有极强的防御性,但由于被劫持的数据都会在验证失败后被丢弃,因而并不能让我们在DNS劫持的情况下获得正确的解析结果.(请先参考:什么是DNSSEC?DNSSEC的 ...

  9. python 网络编程模块_Python网络编程之socket模块

    1.网络协议 网络协议是网络中进行数据交换与传输所需的规则.标准或约定,得到实用主要由语法(数据与信息的结构形式).语义和同步(事件的实现顺序)三个要素组成. 世界上最先提出的协议理论模型是由国际标准 ...

最新文章

  1. AliCloudDB for redis应用场景之存储最新N条聊天记录
  2. Supervisor 托管服务
  3. rocket mq整体架构
  4. virtualenvvirtualenvwrapper on WindowsUbuntu
  5. 4.1.6 OS之文件的基本操作原理(创建、删除、打开、关闭、读-写)
  6. linux svn 撤销del,svn delete-删除文件和目录的实例
  7. 三个变量互换值_Python3 教程 变量类型
  8. javaee后台适合用的编辑器插件
  9. 工作144:时间戳格式化
  10. linux连接sftp服务器,如何在Linux上配置SFTP服务器
  11. AutoRunner自动化测试工具下载地址及安装步骤-泽众云测试
  12. 会员直推奖php程序_PHP自适应卡益源码 前台直销系统报单费直推奖
  13. text-stroke实现文字描边(镂空)、text-fill-color实现文字填充渐变(+animation实现流光字体)...
  14. NowCoder--Protoss and Zerg
  15. krita源码提供了Tarball 和KDE Repository两套源码的区别
  16. 快速上手!2021年字节跳动、阿里等大厂最全Android面试题,Android校招面试指南
  17. ssd hdd linux分区方案,windows10+ubuntu 16.04+双硬盘(SSD+HDD)分区(图文)
  18. ORA-00054 错误原因分析
  19. 短信平台验证码的特点
  20. springboot 2.X jdbc 实现session共享mysql

热门文章

  1. linux目录怎么自动生成,情景linux--如何快速生成大文件?
  2. 一道问题引出的python中可变数据类型与不可变数据类型
  3. Python 的6个日期时间库
  4. android requestparams传入对象,Android xutils3上传文件使用示例
  5. 嵌入式c语言检测键盘,【精华整理】C语言嵌入式系统编程修炼--键盘操作篇
  6. python实现素数筛选法_从零开始学Python系列-第6讲:循环结构
  7. 如何将VMware ubuntu虚拟机磁盘增长改成自分配(未成功)
  8. Intel Realsense D435 将深度图的灰度图映射为彩色图,打印输出灰度图或彩色图
  9. Intel Realsense D435 通过识别目标的像素坐标和深度值(使用内参intrinsics)获取目标点的真实坐标
  10. matplotlib练习