Python基于select实现的socket服务器


Posted in Python onApril 13, 2016

本文实例讲述了Python基于select实现的socket服务器。分享给大家供大家参考,具体如下:

借鉴了asyncore模块中select.select的使用方法

import socket
import traceback
import select
EOL1 = b'\n\n'
EOL2 = b'\n\r\n'
socketmap = {}
r,w,e = [],[],[]
response = b'HTTP/1.0 200 OK\r\nDate: Mon, 1 Jan 1996 01:01:01 GMT\r\n'
response += b'Content-Type: text/plain\r\nContent-Length: 13\r\n\r\n'
response += b'Hello, world!'
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversocket.bind(('0.0.0.0', 23456))
serversocket.listen(1)
#serversocket.setblocking(0)
listening_fileno = serversocket.fileno()
socketmap[listening_fileno] = serversocket
print 'listening_fileno',listening_fileno
try:
  while True:
    r,w,e = [],[],[]
    for fd in socketmap:
      r.append(fd)
      w.append(fd)
      e.append(fd)
    r,w,e = select.select(r,w,e,1)
    for fd in r:
      request = b''
      isocket = socketmap[fd]
      if fd == listening_fileno:
        print 'accepting'
        clientsock,clientaddr = isocket.accept()
        #clientsock.setblocking(0)
        cli_fileno = clientsock.fileno()
        r.append(cli_fileno)
        w.append(cli_fileno)
        e.append(cli_fileno)
        socketmap[cli_fileno] = clientsock
      else:
        print 'reading'
        while EOL1 not in request and EOL2 not in request:
          request += isocket.recv(1024)
        print(request.decode())
    for fd in w:
      print 'writing'
      osocket = socketmap[fd]
      osocket.send(response)
    for fd in e:
      esocket = socketmap[fd]
      print 'socket close',fd
      esocket.close()
      del socketmap[fd]
    print "no data coming"
except Exception,e:
  print traceback.print_exc()
  serversocket.close()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python常规方法实现数组的全排列
Mar 17 Python
Python实现的购物车功能示例
Feb 11 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
python中import与from方法总结(推荐)
Mar 21 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
python打开windows应用程序的实例
Jun 28 Python
深入了解Python枚举类型的相关知识
Jul 09 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
简单分析python的类变量、实例变量
Aug 23 Python
感知器基础原理及python实现过程详解
Sep 30 Python
Python简单实现子网掩码转换的方法
Apr 13 #Python
Python多进程分块读取超大文件的方法
Apr 13 #Python
Python字符串拼接、截取及替换方法总结分析
Apr 13 #Python
Python字符串格式化输出方法分析
Apr 13 #Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 #Python
python 实时遍历日志文件
Apr 12 #Python
python字符串连接方法分析
Apr 12 #Python
You might like
php对数组排序的简单实例
2013/12/25 PHP
php导出CSV抽象类实例
2014/09/24 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
JavaScript简介
2015/02/15 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
理解javascript闭包
2015/12/15 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
Django 导出 Excel 代码的实例详解
2017/08/11 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
学习python可以干什么
2019/02/26 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
flask实现验证码并验证功能
2019/12/05 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
新员工试用期自我鉴定
2014/04/17 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
师德师风的心得体会
2014/09/02 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
年会邀请函范文
2015/01/30 职场文书
自荐信格式模板
2015/03/27 职场文书