代码改正之前,先执行了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再绑定,系统会自动分配一个端口,而程序绑定不了的更多相关文章

  1. 用HTTP核心模块配置一个静态Web服务器

    静态Web服务器的主要功能由ngx_http_core_module模块(HTTP框架的主要成员)实现与core模块类似,可以根据相关模块(如ngx_http_gzip_filter_module.n ...

  2. Go语言实现简单的一个静态WEB服务器

    package main import ( "net/http" ) func main() { http.Handle("/", http.FileServe ...

  3. Fenix – 基于 Node.js 的桌面静态 Web 服务器

    Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...

  4. 深入理解Tornado——一个异步web服务器

    本人的第一次翻译,转载请注明出处:http://www.cnblogs.com/yiwenshengmei/archive/2011/06/08/understanding_tornado.html原 ...

  5. node 创建静态web服务器(上)

    声明:本文仅用来做学习记录. 本文将使用node创建一个简单的静态web服务器. 准备工作: 首先,准备好一个类似图片中这样的页面 第一步: 创建 http 服务: const http = requ ...

  6. 04-HTTP协议和静态Web服务器

    一.HTTP协议(HyperText Transfer Protocol)     超文本传输协议,超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片.音乐.视频.超链接等等都属于超文本. ...

  7. python网络-静态Web服务器案例(29)

    一.静态Web服务器案例代码static_web_server.py # coding:utf-8 # 导入socket模块 import socket # 导入正则表达式模块 import re # ...

  8. node 创建静态web服务器(下)(处理异步获取数据的两种方式)

    接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...

  9. Python之HTTP静态Web服务器开发

    众所周知,Http协议是基于Tcp协议的基础上产生的浏览器到服务器的通信协议 ,其根本原理也是通过socket进行通信. 使用HTTP协议通信,需要注意其返回的响应报文格式不能有任何问题. 响应报文, ...

随机推荐

  1. centos7安装图形化界面

    yum groups install -y "GNOME Desktop" "Graphical Administration Tools"

  2. Jmeter之分布式测试

    1)Jmeter 是纯java 应用,对于CPU和内存的消耗比较大,并且受到JVM的一些限制: 一般情况下,依据机器配置,单机的发压量为300-600,因此,当需要模拟数以千计的并发用户时,使用单台机 ...

  3. oracle预定义角色

    角色是相关权限的集合,使用角色能够简化权限的管理.简而言之就是oracle可以事先把一系列权限集中在一起(角色),打包赋予给用户,那么用户就具有了角色的一系列权限. oracle预定义角色有25种,它 ...

  4. PHP面向对象 ——多态

    接口 接口(interface)是抽象方法和静态常量定义的集合. 接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量. 接口中没有其它类型的内容 接口的定义 /** * 接口可以认为是特殊的 ...

  5. 分享一个废弃已久的插件架构 (.Net)

    框架介绍 1:将插件暴露的页面数据接口复用到任何 WebForm和Mvc 架构的系统. 2:插件可在线卸载,发布,更新. 3:插件可分布式 独立 部署. 4:插件之间完全解耦,通过Url跳转 相互不需 ...

  6. hdu 3926 hands in hands

    https://vjudge.net/problem/HDU-3926 题意:有n个小朋友,他们之间手拉手,但是一只手只能拉一只手或者不拉,现在给出两个图,表示拉手关系,问这两个图是否同构.思路:一开 ...

  7. Es6 新增函数

    ====函数的扩展 -----ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log( ...

  8. c# 多线程 创建对象实例

    本次的标题是我在写单例模式的博客时遇到的问题,所以今天专门写了的demo让自己记住怎么简单的使用多线程. 一直纠结的是怎么在for循环中多次实例化对象,好复现单例模式在没有加锁的情况下出现多个实例对象 ...

  9. (转)IBM MQ 创建以及常见问题集锦

    背景:这篇文章还是很全面的,但是很杂乱 后面慢慢整理吧! 1 MQ 消息队列+发送队列+消息通道 接收通道名称与发送端的发送通道名称要一致,修改通道信息后要执行 start channle(chlna ...

  10. php apache phpmyadmin mysql环境安装

    文件下载: Apache: http://httpd.apache.org/download.cgi PHP,phpMyAdmin,mysql,API下载:http://pan.baidu.com/s ...