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

服务器

#coding=utf-8
from socket import *
import time# 用来存储所有的新链接的socket
g_socketList = []def main():serSocket = socket(AF_INET, SOCK_STREAM)serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR  , 1)localAddr = ('', 7788)serSocket.bind(localAddr)#可以适当修改listen中的值来看看不同的现象serSocket.listen(1000)#将套接字设置为非堵塞#设置为非堵塞后,如果accept时,恰巧没有客户端connect,那么accept会#产生一个异常,所以需要try来进行处理serSocket.setblocking(False)while True:#用来测试#time.sleep(0.5)try:newClientInfo = serSocket.accept()except Exception as result:passelse:print("一个新的客户端到来:%s"%str(newClientInfo))newClientInfo[0].setblocking(False)g_socketList.append(newClientInfo)# 用来存储需要删除的客户端信息needDelClientInfoList = []for clientSocket,clientAddr in g_socketList:try:recvData = clientSocket.recv(1024)if len(recvData)>0:print('recv[%s]:%s'%(str(clientAddr), recvData))else:print('[%s]客户端已经关闭'%str(clientAddr))clientSocket.close()g_needDelClientInfoList.append((clientSocket,clientAddr))except Exception as result:passfor needDelClientInfo in needDelClientInfoList:g_socketList.remove(needDelClientInfo)if __name__ == '__main__':main()

客户端

#coding=utf-8
from socket import *
import random
import timeserverIp = raw_input("请输入服务器的ip:")
connNum = raw_input("请输入要链接服务器的次数(例如1000):")
g_socketList = []
for i in range(int(connNum)):s = socket(AF_INET, SOCK_STREAM)s.connect((serverIp, 7788))g_socketList.append(s)print(i)while True:for s in g_socketList:s.send(str(random.randint(0,100)))# 用来测试用#time.sleep(1)

单进程服务器-非堵塞模式(python版)相关推荐

  1. Windows Sockets2 详解2——堵塞与非堵塞模式

    Socket有两种调用模式:堵塞与非堵塞模式. 顾名思义,堵塞模式就是线程在调用windows socket API后,被挂起直到该函数执行完毕.在(1)中我们知道socket函数调用并不是立即完成的 ...

  2. 生产者与消费者模式(python 版)

    1. 队列 先进先出 2. 栈 先进后出 Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 ...

  3. 并发服务器模型——单进程服务器

    单进程服务器 1. 完成一个简单的TCP服务器 from socket import *serSocket = socket(AF_INET, SOCK_STREAM)# 重复使用绑定的信息 serS ...

  4. recv/send堵塞和非堵塞

    recv/send堵塞和非堵塞理解 TCP之深入浅出send和recv 需要理解的3个概念 实例详解send() send函数 recv函数 参考: TCP之深入浅出send和recv linux下非 ...

  5. python模拟多线程http请求_用python实现自己的http服务器——多进程、多线程、协程、单进程非堵塞版、epoll版...

    了解http协议 http请求头 GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive Pragma: no-cache Cache-Co ...

  6. 单进程服务器(python版)

    单进程服务器 1. 完成一个简单的TCP服务器 from socket import *serSocket = socket(AF_INET, SOCK_STREAM)# 重复使用绑定的信息 serS ...

  7. Python正则表达式中的贪心模式和非贪心模式

    声明:最近发现有人利用我在百度云盘里免费分享的127课Python视频盈利,并声称获得我的授权.在此,我声明,文末百度云盘里的Python视频是免费的,不会授权给任何人或机构进行销售.如果再发现有人卖 ...

  8. python调用soap_如何在python zeep中调用soap api而不使用wsdl(非wsdl模式)?使用用户和密码身份验证调用位置URL...

    我无法在Zeep python客户端中为SOAP API验证用户身份 . 我有两个网址: 1) http://credotrade.stg-tradingcrm.com:8093/mex - 它指定了 ...

  9. Python版儿童识字游戏源代码,结合植物大战僵尸和儿童识字的小游戏,含学习模式和娱乐模式

    Python版儿童识字游戏源代码,结合植物大战僵尸和儿童识字的小游戏,含学习模式和娱乐模式. 娱乐模式下,僵尸会头顶不同的汉字,此时屏幕会提示要消灭的汉字,移动豌豆消灭对应汉字的僵尸,如果攻击非提示汉 ...

最新文章

  1. Python使用matplotlib可视化条形图(bar plot)、自定义在条形图的顶部添加数值标签(Bar Chart)
  2. Qt下的OpenGL 编程(3)绘制平面几何体
  3. 【Flutter】Flutter 混合开发 ( 混合开发中 Flutter 的 热重启 / 热加载 )
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的流浪宠物救助系统
  5. 矩阵分析 第三章 内积空间 正规矩阵 Hermite矩阵
  6. mysql + mha + keepalive + vip_MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置
  7. 详解站长之家之站长工具四大新功能
  8. Android开机执行指定shell脚本
  9. 双系统linux开机黑屏,解决双系统中ubuntu开关机异常,黑屏,出现“nouveau , SCHED_ERROR”字样等的问题...
  10. PeopleSoft 登录页面更换
  11. RPM构建 - SPEC文件参数解析
  12. Docker未授权漏洞复现(合天网安实验室)
  13. MySQL 常用时间记录
  14. 函数名作为字符串输出(Function Names as Strings)
  15. 怎样学习C语言——快速上手C语言系列之—什么是指针
  16. java.sql.SQLException: Undefined Error
  17. 水果店圈子:水果店坏水果应该怎么处理,水果店卖剩下的水果如何处理
  18. 基于matlab的蝗虫优化(Grasshopper Optimization Algorithm,GOA)算法仿真
  19. 哈佛商业评论:什么是颠覆性创新?
  20. HTML+CSS实现心形效果

热门文章

  1. linux禁用root登录
  2. Java-使用反射获取类型信息
  3. StringBuffer 和 StringBuilder 的 3 个区别
  4. 《游戏设计师修炼之道:数据驱动的游戏设计》一2.3 创建漏洞:一个例子
  5. Kali Linux安装Remmina无法加载RDP插件
  6. [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
  7. 理解 Delphi 的类(十) - 深入方法[27] - 递归函数: 简单示例
  8. iOS客户端流量统计
  9. [Js]淡入淡出的图片
  10. 手动安装lzop压缩工具 - JerryMo06的专栏 - 博客频道 - CSDN.NET