做的简单的一个静态web服务器,遇到个bug, 提示osError,这点一不小心就错了,特地记下来,加深记忆,socket须先绑定,再listen,如果是先listen再绑定,系统会自动分配一个端口,而程序绑定不了
代码改正之前,先执行了listen,到了bind就报错;此程序只需将listen和改到bind后面即可
from socket import *
from multiprocessing import Process
import re
HTML_FILE = './html'
class Server(object):
def __init__(self):
self.server_socket = socket(AF_INET,SOCK_STREAM)
self.server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
self.server_socket.listen(128)
def bind_addr(self,port):
self.server_socket.bind(('',port))
def start(self):
改:将listen放在这里
self.server-socket.listen(128)
while True:
client_socket,client_addr = self.server_socket.accept()
client_p = Process(target=self.clientDeal,args=(client_socket,))
client_p.start()
client_socket.close()
def clientDeal(self,client_socket):
recv_data = client_socket.recv(2048)
requestHeaderLines = recv_data.decode('utf-8').splitlines()
for line in requestHeaderLines:
print(line)
request_start_line = requestHeaderLines[0]
print(request_start_line)
file_name = re.match(r'\w+ +(/[^ ]*)',request_start_line).group(1)
print(file_name)
if file_name == '/':
file_name = HTML_FILE + '/index.html'
else:
file_name = HTML_FILE + file_name
try:
txt = open(file_name,'rb')
except IOError:
responseHeaderlines = 'HTTP/1.1 404 NOT Found\r\n'
response2 = 'server:my server\r\n' + '\r\n'
responseBody = 'The file is not found!'
else:
file_data = txt.read()
responseHeaderlines = 'HTTP/1.1 200 ok\r\n'
response2 = 'server:my server\r\n' + '\r\n'
responseBody = file_data.decode('utf-8')
txt.close()
response = responseHeaderlines + response2 + responseBody
#client_socket.send(bytes(response,'utf-8'))
client_socket.send(response.encode('utf-8'))
client_socket.close()
def main():
server = Server()
server.bind_addr(999)
server.start()
if __name__ == '__main__':
main()
做的简单的一个静态web服务器,遇到个bug, 提示osError,这点一不小心就错了,特地记下来,加深记忆,socket须先绑定,再listen,如果是先listen再绑定,系统会自动分配一个端口,而程序绑定不了的更多相关文章
- 用HTTP核心模块配置一个静态Web服务器
静态Web服务器的主要功能由ngx_http_core_module模块(HTTP框架的主要成员)实现与core模块类似,可以根据相关模块(如ngx_http_gzip_filter_module.n ...
- Go语言实现简单的一个静态WEB服务器
package main import ( "net/http" ) func main() { http.Handle("/", http.FileServe ...
- Fenix – 基于 Node.js 的桌面静态 Web 服务器
Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...
- 深入理解Tornado——一个异步web服务器
本人的第一次翻译,转载请注明出处:http://www.cnblogs.com/yiwenshengmei/archive/2011/06/08/understanding_tornado.html原 ...
- node 创建静态web服务器(上)
声明:本文仅用来做学习记录. 本文将使用node创建一个简单的静态web服务器. 准备工作: 首先,准备好一个类似图片中这样的页面 第一步: 创建 http 服务: const http = requ ...
- 04-HTTP协议和静态Web服务器
一.HTTP协议(HyperText Transfer Protocol) 超文本传输协议,超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片.音乐.视频.超链接等等都属于超文本. ...
- python网络-静态Web服务器案例(29)
一.静态Web服务器案例代码static_web_server.py # coding:utf-8 # 导入socket模块 import socket # 导入正则表达式模块 import re # ...
- node 创建静态web服务器(下)(处理异步获取数据的两种方式)
接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...
- Python之HTTP静态Web服务器开发
众所周知,Http协议是基于Tcp协议的基础上产生的浏览器到服务器的通信协议 ,其根本原理也是通过socket进行通信. 使用HTTP协议通信,需要注意其返回的响应报文格式不能有任何问题. 响应报文, ...
随机推荐
- Java自学手记——servlet3.0新特性
servlet3.0出来已经很久了,但市场上尚未普遍应用,servlet3.0有三个比较重要的新特性:使用注解来代替配置文件,异步处理以及上传组件支持. 支持servlet3.0的要求:MyEclip ...
- es6的一些知识点
es6的一些知识点 前言:es6(ECMAscript2015)标准 let.const.var的一些区别 let.const 块级作用域.全局作用域.函数作用域 var 全局作用域.函数作用域 变量 ...
- 新笔记tst
这是测试文章 来自为知笔记(Wiz)
- Spring3中@Value注解的使用
Spring可以通过@Value注解来直接获取properties文件里面配置的值. 1. 首先要在spring的配置文件中指明properties文件的位置: <context:propert ...
- spring boot 拦截器添加
@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Autowired private XxxInt ...
- 深入浅析JavaScript中的constructor
constructor 属性返回对创建此对象的数组函数的引用.本文给大家介绍JavaScript中的constructor ,需要的朋友参考下吧 定义和用法 constructor 属性返回对创建此对 ...
- icon button样式(类似windows桌面图标)
<Style x:Key="IconButton" TargetType="{x:Type Button}"> <Setter Propert ...
- Ambari安装之部署本地库(镜像服务器)(二)
部署本地库(镜像服务器) (1)下载HortWorks官网上的3个库到本地(也可以在线下载,但是速度会很慢) 我们先把hortworks官网上需要下载的3个库下载到本地(这个还是需要很长时间的,当然你 ...
- [编辑器]vim常用操作
我是ide的用户,对于vim一只停留在:打开.看.写.关闭基本操作,因为现在更多的接触linux服务器,所以为了提高 效率,用好vim是必备技能!下面罗列一些vim的常用操作,用做备忘(不断更新): ...
- Hybris安装和各个Extention简单介绍
前言:突然想好好梳理一下这几个月所学的内容了,顺便让自己的知识有一个系统的框架. 一. 安装JDK 请安装最新的Oracle JDK 8.0版(从Oracle官网下载). 二.开发工具建议使用 In ...