单进程服务器-非堵塞模式(python版)
单进程服务器-非堵塞模式
服务器
#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版)相关推荐
- Windows Sockets2 详解2——堵塞与非堵塞模式
Socket有两种调用模式:堵塞与非堵塞模式. 顾名思义,堵塞模式就是线程在调用windows socket API后,被挂起直到该函数执行完毕.在(1)中我们知道socket函数调用并不是立即完成的 ...
- 生产者与消费者模式(python 版)
1. 队列 先进先出 2. 栈 先进后出 Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 ...
- 并发服务器模型——单进程服务器
单进程服务器 1. 完成一个简单的TCP服务器 from socket import *serSocket = socket(AF_INET, SOCK_STREAM)# 重复使用绑定的信息 serS ...
- recv/send堵塞和非堵塞
recv/send堵塞和非堵塞理解 TCP之深入浅出send和recv 需要理解的3个概念 实例详解send() send函数 recv函数 参考: TCP之深入浅出send和recv linux下非 ...
- python模拟多线程http请求_用python实现自己的http服务器——多进程、多线程、协程、单进程非堵塞版、epoll版...
了解http协议 http请求头 GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive Pragma: no-cache Cache-Co ...
- 单进程服务器(python版)
单进程服务器 1. 完成一个简单的TCP服务器 from socket import *serSocket = socket(AF_INET, SOCK_STREAM)# 重复使用绑定的信息 serS ...
- Python正则表达式中的贪心模式和非贪心模式
声明:最近发现有人利用我在百度云盘里免费分享的127课Python视频盈利,并声称获得我的授权.在此,我声明,文末百度云盘里的Python视频是免费的,不会授权给任何人或机构进行销售.如果再发现有人卖 ...
- python调用soap_如何在python zeep中调用soap api而不使用wsdl(非wsdl模式)?使用用户和密码身份验证调用位置URL...
我无法在Zeep python客户端中为SOAP API验证用户身份 . 我有两个网址: 1) http://credotrade.stg-tradingcrm.com:8093/mex - 它指定了 ...
- Python版儿童识字游戏源代码,结合植物大战僵尸和儿童识字的小游戏,含学习模式和娱乐模式
Python版儿童识字游戏源代码,结合植物大战僵尸和儿童识字的小游戏,含学习模式和娱乐模式. 娱乐模式下,僵尸会头顶不同的汉字,此时屏幕会提示要消灭的汉字,移动豌豆消灭对应汉字的僵尸,如果攻击非提示汉 ...
最新文章
- Python使用matplotlib可视化条形图(bar plot)、自定义在条形图的顶部添加数值标签(Bar Chart)
- Qt下的OpenGL 编程(3)绘制平面几何体
- 【Flutter】Flutter 混合开发 ( 混合开发中 Flutter 的 热重启 / 热加载 )
- 基于JAVA+SpringMVC+Mybatis+MYSQL的流浪宠物救助系统
- 矩阵分析 第三章 内积空间 正规矩阵 Hermite矩阵
- mysql + mha + keepalive + vip_MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置
- 详解站长之家之站长工具四大新功能
- Android开机执行指定shell脚本
- 双系统linux开机黑屏,解决双系统中ubuntu开关机异常,黑屏,出现“nouveau , SCHED_ERROR”字样等的问题...
- PeopleSoft 登录页面更换
- RPM构建 - SPEC文件参数解析
- Docker未授权漏洞复现(合天网安实验室)
- MySQL 常用时间记录
- 函数名作为字符串输出(Function Names as Strings)
- 怎样学习C语言——快速上手C语言系列之—什么是指针
- java.sql.SQLException: Undefined Error
- 水果店圈子:水果店坏水果应该怎么处理,水果店卖剩下的水果如何处理
- 基于matlab的蝗虫优化(Grasshopper Optimization Algorithm,GOA)算法仿真
- 哈佛商业评论:什么是颠覆性创新?
- HTML+CSS实现心形效果
热门文章
- linux禁用root登录
- Java-使用反射获取类型信息
- StringBuffer 和 StringBuilder 的 3 个区别
- 《游戏设计师修炼之道:数据驱动的游戏设计》一2.3 创建漏洞:一个例子
- Kali Linux安装Remmina无法加载RDP插件
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
- 理解 Delphi 的类(十) - 深入方法[27] - 递归函数: 简单示例
- iOS客户端流量统计
- [Js]淡入淡出的图片
- 手动安装lzop压缩工具 - JerryMo06的专栏 - 博客频道 - CSDN.NET