python实现http协议_python使用socket实现TCP支持HTTP协议的静态网页服务器
直接上代码:
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协议的静态网页服务器相关推荐
- udp协议没有粘包问题、基于socketserver实现并发的socket(基于tcp、udp协议)、基于udp协议的套接字、操作系统原理以及进程知识
基于udp协议的套接字通信服务端 from socket import *server=socket(AF_INET,SOCK_DGRAM) #数据报协议->udp server.bind((' ...
- Socket、TCP和UDP协议、端口含义
1.如何理解Socket 两台计算机相互通讯靠的就是Socket,类似于2个人通讯要靠电话,也就是说Socket就是程序之间的电话.Socket英文意思是孔.插座,作为进程通讯机制,取后一种意思,通常 ...
- python远程调用摄像头_Python设置Socket代理及实现远程摄像头控制的例子
为python设置socket代理首先,你得下载SocksiPy这个.解压出来之后里面会有一个socks.py文件.然后你可以把这个文件复制到python安装目录里面的Lib\site-package ...
- python实现文件传输_Python使用socket实现简单的文件传输并校验
因为工作需要,要在两台设备之间进行压力测试.即A设备不断往B设备发送文件,B设备接收文件后校验文件是否正确接收. 用Python的socket模块写了简单的Server和Client脚本.Server ...
- python传输大文件_python之socket运用之传输大文件
socket建议最大的传输单元是8192个字符,但是如果超过8192就会出现问题,我们可以用下面的方法处理 客户端代码 import subprocess import socket ip_bind ...
- python socket客户端_python 使用socket模拟tcp客户端和tcp服务器端
''' 客户端代码 ''' import socket #创建套接字 tcpClientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREA ...
- python接入讯代理_python实现简单的TCP代理服务器
本文实例讲述了python实现简单的TCP代理服务器的方法,分享给大家供大家参考. 具体实现代码如下: # -*- coding: utf-8 -*- ''' filename:rtcp.py @de ...
- [网络协议]:如何验证DNS服务器是否支持dnssec协议
众所周知,DNSSEC对于DNS劫持虽然有极强的防御性,但由于被劫持的数据都会在验证失败后被丢弃,因而并不能让我们在DNS劫持的情况下获得正确的解析结果.(请先参考:什么是DNSSEC?DNSSEC的 ...
- python 网络编程模块_Python网络编程之socket模块
1.网络协议 网络协议是网络中进行数据交换与传输所需的规则.标准或约定,得到实用主要由语法(数据与信息的结构形式).语义和同步(事件的实现顺序)三个要素组成. 世界上最先提出的协议理论模型是由国际标准 ...
最新文章
- AliCloudDB for redis应用场景之存储最新N条聊天记录
- Supervisor 托管服务
- rocket mq整体架构
- virtualenvvirtualenvwrapper on WindowsUbuntu
- 4.1.6 OS之文件的基本操作原理(创建、删除、打开、关闭、读-写)
- linux svn 撤销del,svn delete-删除文件和目录的实例
- 三个变量互换值_Python3 教程 变量类型
- javaee后台适合用的编辑器插件
- 工作144:时间戳格式化
- linux连接sftp服务器,如何在Linux上配置SFTP服务器
- AutoRunner自动化测试工具下载地址及安装步骤-泽众云测试
- 会员直推奖php程序_PHP自适应卡益源码 前台直销系统报单费直推奖
- text-stroke实现文字描边(镂空)、text-fill-color实现文字填充渐变(+animation实现流光字体)...
- NowCoder--Protoss and Zerg
- krita源码提供了Tarball 和KDE Repository两套源码的区别
- 快速上手!2021年字节跳动、阿里等大厂最全Android面试题,Android校招面试指南
- ssd hdd linux分区方案,windows10+ubuntu 16.04+双硬盘(SSD+HDD)分区(图文)
- ORA-00054 错误原因分析
- 短信平台验证码的特点
- springboot 2.X jdbc 实现session共享mysql
热门文章
- linux目录怎么自动生成,情景linux--如何快速生成大文件?
- 一道问题引出的python中可变数据类型与不可变数据类型
- Python 的6个日期时间库
- android requestparams传入对象,Android xutils3上传文件使用示例
- 嵌入式c语言检测键盘,【精华整理】C语言嵌入式系统编程修炼--键盘操作篇
- python实现素数筛选法_从零开始学Python系列-第6讲:循环结构
- 如何将VMware ubuntu虚拟机磁盘增长改成自分配(未成功)
- Intel Realsense D435 将深度图的灰度图映射为彩色图,打印输出灰度图或彩色图
- Intel Realsense D435 通过识别目标的像素坐标和深度值(使用内参intrinsics)获取目标点的真实坐标
- matplotlib练习