#!/usr/bin/env python
# -*- coding:utf-8 -*- # 客户端
import socket obj = socket.socket()
obj.connect(("127.0.0.1", 8003))
# 如果服务端不accept,阻塞
content = str(obj.recv(1024), encoding="utf-8")
print(content)
obj.close() # 服务器端
import socket
import select sk1 = socket.socket()
sk1.bind(("127.0.0.1", 8003))
sk1.listen(5)
inputs = [sk1, sk2, ]
while True:
r_list, w_list, e_list = select.select(inputs, [], [], 1)
for sk in r_list:
conn, address = sk.accept()
conn.sendall(bytes("hello", encoding="utf-8"))
conn.close() # send和sendall的区别是sendall里面有一个while循环会把要发送的所有信息都发送出去才返回
# 但是send的话不一定全部发送,发送多少个字节就返回多少个字节
# 程序从上到下执行,执行到select,用1s的时间去系统内核检查是否有发生变化,如果超时了,就出去了,就是执行
# 到select,程序会等1s,如果在1s的时间内没有人来连,那么程序就会继续往下走,如果第0.5s有人来连接,那么
# 程序就会直接往下走,1s是最多的等待时间
#
# 当客户端中止,会给服务端发空数据,select依然能够监听到 2.7
# 3的话用try except # 服务器端 import socket
import select sk1 = socket.socket()
sk1.bind(("127.0.0.1", 8003))
sk1.listen(5)
inputs = [sk1, ]
outputs = []
message_dict = {}
while True:
r_list, w_list, e_list = select.select(inputs, outputs, inputs, 1)
for sk in r_list:
if sk == sk1:
conn, address = sk.accept()
inputs.append(conn)
message_dict[conn] = []
else:
try:
data_bytes = sk.recv(1024) except Exception as e:
inputs.remove(sk)
else:
data_str = str(data_bytes, encoding="utf-8")
message_dict[sk].append(data_str)
# sk.sendall(bytes(data_str + "hao", encoding="utf-8"))
outputs.append(sk)
for conn in w_list:
recv_str = message_dict[conn][0]
del message_dict[conn][0]
conn.sendall(bytes(recv_str+"hello",encoding="utf-8"))
outputs.remove(conn) # 无论是中止还是control+c,都能用try,except捕捉到
# 如果接受到消息,执行else语句,如果接收不到消息,执行except语句
# w_list保存的是给服务端发消息的客户端,然后你可以发消息给该客户端
# message_dict这里可以用queue来优化

IO多路复用注解的更多相关文章

  1. 事件驱动模型和异步IO多路复用

    事件驱动模型 协程:遇到IO操作就切换. 但什么时候切回去呢?怎么确定IO操作完了? 很多程序员可能会考虑使用“线程池”或“连接池”.“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程, ...

  2. python网络编程——IO多路复用之select

    1 IO多路复用的概念 原生socket客户端在与服务端建立连接时,即服务端调用accept方法时是阻塞的,同时服务端和客户端在收发数据(调用recv.send.sendall)时也是阻塞的.原生so ...

  3. python学习笔记10--协程、IO、IO多路复用

    本节内容 一.协程 1.1.协程概念 1.2.greenlet 1.3.Gevent 1.4.协程之爬虫 1.5.协程之socket 二.论事件驱动与异步IO 三.IO 3.1.概念说明 3.2.IO ...

  4. Python(七)Socket编程、IO多路复用、SocketServer

    本章内容: Socket IO多路复用(select) SocketServer 模块(ThreadingTCPServer源码剖析) Socket socket通常也称作"套接字" ...

  5. IO多路复用概念性

    sellect.poll.epoll三者的区别 先来了解一下什么是进程切换 为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行,这种行为为进程的切换,任务切换 ...

  6. IO多路复用之select总结

    1.基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程.IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/ ...

  7. IO多路复用之poll总结

    1.基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制.poll和selec ...

  8. IO多路复用之epoll总结

    1.基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本.相对于select和poll来说,epoll更加灵活,没有描述符限制.epoll使用一个文件描述符管理多个描述 ...

  9. python中的IO多路复用

    在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...

随机推荐

  1. python xlwt模块生成excel文件并写入数据 xlrd读取数据

    python中一般使用 xlwt (excel write)来生成Excel文件(可以控制单元格格式),用 xlrd 来读取Excel文件,用xlrd读取excel是不能对其进行操作的. 1.xlrd ...

  2. PyCharm专业版的安装与破解

    1.下载pycharm:https://www.jetbrains.com/pycharm/download/#section=windows 2.这是下载好的文件,双击运行即可 3.选择安装路径 4 ...

  3. Linux 版本svn安装

    CentOS6.5离线安装subversion 下载 linux rpm安装包 (我只下载了subversion-1.6.12-1.rhel5.x86_64.rpm),直接安装时会提示缺少依赖,在 r ...

  4. BZOJ4621 Tc605(动态规划)

    容易发现最终序列所有数字的相对顺序不变,一个数字可能的覆盖范围由两边第一个比它大的数决定,且若不考虑次数限制所有这样的序列都可以变换得到.对于一个序列,其需要的最少变换次数显然就是覆盖了别的位置的数的 ...

  5. nginx实现https网站设置

    一.HTTPS简介 1.https简介 HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块.服务端和客户端的信息传输都会通过TLS进行加密, ...

  6. [PA2014]Druzyny

    题目描述 体育课上,n个小朋友排成一行(从1到n编号),老师想把他们分成若干组,每一组都包含编号连续的一段小朋友,每个小朋友属于且仅属于一个组.第i个小朋友希望它所在的组的人数不多于d[i],不少于c ...

  7. jvm学习笔记一(垃圾回收算法)

    一:垃圾回收机制的原因 java中,当没有对象引用指向原先分配给某个对象的内存时候,该内存就成为了垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息 ...

  8. 配置sudo记录日志

    sudosudo命令用来以其他身份来执行命令,预设的身份为root.在/etc/sudoers中设置了可执行sudo指令的用户.若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员.用户使用 ...

  9. Spotlight--你不得不用的Mac查询利器

    世界上有两种Mac用户:一种是经常使用Spotlight的,另一种是忽略Spotlight的.如果你是第二种用户,那么你需要改变.Mac所有方面的使用场景,都会随着Spotlight而变得更快.你只需 ...

  10. react实战项目开发(1) 搭建react开发环境初始化项目(Create-react-app)

    前言 Create React App npm install -g create-react-app create-react-app my-app cd my-app npm start 执行命令 ...