单进程服务器-非堵塞模式

服务器

  1. #coding=utf-8
  2. from socket import *
  3. import time
  4.  
  5. # 用来存储所有的新链接的socket
  6. g_socketList = []
  7.  
  8. def main():
  9. serSocket = socket(AF_INET, SOCK_STREAM)
  10. serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)
  11. localAddr = ('', 7788)
  12. serSocket.bind(localAddr)
  13. #可以适当修改listen中的值来看看不同的现象
  14. serSocket.listen(1000)
  15. #将套接字设置为非堵塞
  16. #设置为非堵塞后,如果accept时,恰巧没有客户端connect,那么accept会
  17. #产生一个异常,所以需要try来进行处理
  18. serSocket.setblocking(False)
  19.  
  20. while True:
  21.  
  22. #用来测试
  23. #time.sleep(0.5)
  24.  
  25. try:
  26. newClientInfo = serSocket.accept()
  27. except Exception as result:
  28. pass
  29. else:
  30. print("一个新的客户端到来:%s"%str(newClientInfo))
  31. newClientInfo[0].setblocking(False)
  32. g_socketList.append(newClientInfo)
  33.  
  34. # 用来存储需要删除的客户端信息
  35. needDelClientInfoList = []
  36.  
  37. for clientSocket,clientAddr in g_socketList:
  38. try:
  39. recvData = clientSocket.recv(1024)
  40. if len(recvData)>0:
  41. print('recv[%s]:%s'%(str(clientAddr), recvData))
  42. else:
  43. print('[%s]客户端已经关闭'%str(clientAddr))
  44. clientSocket.close()
  45. g_needDelClientInfoList.append((clientSocket,clientAddr))
  46. except Exception as result:
  47. pass
  48.  
  49. for needDelClientInfo in needDelClientInfoList:
  50. g_socketList.remove(needDelClientInfo)
  51.  
  52. if __name__ == '__main__':
  53. main()

客户端

  1. #coding=utf-8
  2. from socket import *
  3. import random
  4. import time
  5.  
  6. serverIp = raw_input("请输入服务器的ip:")
  7. connNum = raw_input("请输入要链接服务器的次数(例如1000):")
  8. g_socketList = []
  9. for i in range(int(connNum)):
  10. s = socket(AF_INET, SOCK_STREAM)
  11. s.connect((serverIp, 7788))
  12. g_socketList.append(s)
  13. print(i)
  14.  
  15. while True:
  16. for s in g_socketList:
  17. s.send(str(random.randint(0,100)))
  18.  
  19. # 用来测试用
  20. #time.sleep(1)

python网络编程(九)的更多相关文章

  1. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  2. Python 网络编程(一)

    Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  3. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  4. linux网络编程九:splice函数,高效的零拷贝

    from:http://blog.csdn.net/jasonliuvip/article/details/22600569 linux网络编程九:splice函数,高效的零拷贝 最近在看<Li ...

  5. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  6. python网络编程-01

    python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...

  7. 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档

    Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...

  8. Python网络编程基础pdf

    Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...

  9. python 网络编程(Socket)

    # from wsgiref.simple_server import make_server## def RunServer(environ,start_response):# start_resp ...

  10. python 网络编程 IO多路复用之epoll

    python网络编程——IO多路复用之epoll 1.内核EPOLL模型讲解     此部分参考http://blog.csdn.net/mango_song/article/details/4264 ...

随机推荐

  1. Lua中assert( )函数的使用

    当Lua遇到不期望的情况时就会抛出错误,比如:两个非数字进行相加:调用一个非函数的变量:访问表中不存在的值等.你也可以通过调用error函数显示的抛出错误,error的参数是要抛出的错误信息. ass ...

  2. mysql如何在一张表中插入一万条数据?(用存储过程解决)

    写一个存储过程,里面写一个循环,就可以了.主键你现在不是自增的,所以写语句的时候,就Insert到3个字段中. DELIMITER $$ DROP PROCEDURE IF EXISTS `proc_ ...

  3. java去除html代码中含有的html、js、css标签,获取文字内容

    https://blog.csdn.net/u010882234/article/details/80585175

  4. 【NOI2017】泳池

    题解: 满分的笛卡尔树以后再学吧.. 40分还是比较好想的 但是状态挺复杂的 直接贴代码了 代码: #include <bits/stdc++.h> using namespace std ...

  5. python之 MySQLdb 实践 爬一爬号码

    0.目录 2.构建URL3.新建数据库4.新建汇总表5.定义连接数据库函数:connect_db(db=None, cursorclass=DictCursor)6.汇总表填充必要数据7.新建各省份子 ...

  6. P1005 矩阵取数游戏 区间dp 高精度

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...

  7. 013 mysql中find_in_set()函数的使用

    在工作中遇见过,对于新知识,在这里写一写文档. 1.作用 举个例子,也许不理解,在看完后面的SQL示例,再来看就明白了: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点 ...

  8. 003 python中的内置函数

    一:如何查看内置函数 1.命令 dir(__builtins__) 2.效果 二:具体的用法 1.input 简单使用: 2.type 返回变量的类型 3.str 将类型转变为字符串 4.isinst ...

  9. 爬虫3 requests基础之 乱码编码问题

    import requests res = requests.get('http://www.quanshuwang.com') res.encoding = 'gbk' print(res.text ...

  10. 浅谈solr

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http Get操 ...