1. #服务端
  2. import socket
  3. sk = socket.socket()
  4. sk.bind(('127.0.0.1',8080))
  5. sk.listen()
  6. while True:
  7. conn, address = sk.accept()
  8. while True:
  9. ret = conn.recv(1024)
  10. print(ret)
  11. inp = input('>>>')
  12. conn.sendall(inp.encode('utf-8'))
  13. # conn.sendall(bytes(inp, 'utf-8'))
  14. #客户端
  15. import socket
  16. sk=socket.socket()
  17. sk.connect(('127.0.0.1',8080))
  18. while True:
  19. inp=input('>>>>')
  20. sk.sendall(bytes(inp,'utf-8'))
  21. data=sk.recv(1024)
  22. print(str(data,'utf-8'))

  1. #非阻塞IO进行recvform系统调用,会马上得到一个结果,如果结果是一个error(异常处理)
  2. # 此时证明数据还未准备好,在等在下次进行recvform系统调用的期间,进程可以做其他事情
  3. #这个过程非阻塞将整片时间片分成N多小阻塞,循环往复的进行recvform的系统调用
  4.  
  5. #服务端
  6. import time
  7. import socket
  8. import os
  9. sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  10. # sk.setsockopt
  11. sk.bind(('127.0.0.1',8080))
  12. sk.listen(5)
  13. sk.setblocking(False)
  14. while True:
  15. try:
  16. print('waiting client connection.......')
  17. conn,address =sk.accept()
  18. # print(os.getpid())
  19. print('++++',address)
  20. ret = conn.recv(1024) #系统级内核数据拷贝到用户级内存
  21. print(ret)
  22. conn.close()
  23. except Exception as e:
  24. print(e)
  25. time.sleep(4)#在此期间进程可以做其他任务
  26. #客户端
  27. import time
  28. import socket
  29. sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  30. while True:
  31. sk.connect(('127.0.0.1',8080))
  32. print('hello')
  33. sk.sendall(b'hello')
  34. time.sleep(2)
  35. break

  1. #select的使用#服务端
  2. import socket
  3. import select
  4. sk=socket.socket()
  5. sk.bind(('127.0.0.1',8080))
  6. sk.listen(5)
  7. sk.setblocking(False)
  8. inputs=[sk,] #监听一个活动对象的列表
  9. while True:
  10. r,w,e=select.select(inputs,[],[],5) #哪个对象活动了,r就会被选出来
  11. print('可活动的列表长度%s' % len(inputs))
  12. print('活动的对象只有%s个' % len(r))
  13. # print(type(r))
  14. for obj in r:
  15. if obj==sk:
  16. conn,add=obj.accept()
  17. print('conn:',conn)
  18. inputs.append(conn) #客户端的套接字对象放入活动列表中
  19. print('append之后<<<',r)
  20. else:
  21. data_byte=obj.recv(1024)
  22. print(str(data_byte,'utf-8'))
  23. if not data_byte:
  24. inputs.remove(obj)
  25. continue
  26. inp=input('回答%s >>>' % inputs.index(obj))
  27. obj.sendall(bytes(inp,'utf-8'))
  28. print('结尾>>>',r)
  29. #客户端
  30. import socket
  31. sk=socket.socket()
  32. sk.connect(('127.0.0.1',8080))
  33.  
  34. while True:
  35. inp=input('>>>>')
  36. sk.sendall(bytes(inp,'utf-8'))
  37. data=sk.recv(1024)
  38. print(str(data,'utf-8'))

参考资料:http://www.cnblogs.com/Eva-J/articles/8324837.html

阻塞IO,非阻塞IO,IO多路复用模型的更多相关文章

  1. IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO

    IO模型介绍: * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO multiplexing IO多路复用 * signal driven IO 信号驱动IO ...

  2. python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)

    昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...

  3. {python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块

    python之IO多路复用 阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 ...

  4. (IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)

    参考博客: https://www.cnblogs.com/xiao987334176/p/9056511.html 内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yi ...

  5. IO阻塞模型、IO非阻塞模型、多路复用IO模型

    IO操作主要包括两类: 本地IO 网络IO 本地IO:本地IO是指本地的文件读取等操作,本地IO的优化主要是在操作系统中进行,我们对于本地IO的优化作用十分有限 网络IO:网络IO指的是在进行网络操作 ...

  6. IO多路复用,同步,异步,阻塞和非阻塞 区别

    一.什么是socket?什么是I/O操作? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是 ...

  7. IO多路复用,同步,异步,阻塞和非阻塞 区别(转)

    转自:http://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral 同步.异步 是 ...

  8. Python网络编程-IO阻塞与非阻塞及多路复用

    前言 问题:普通套接字实现的服务端的缺陷 一次只能服务一个客户端!                         accept阻塞! 在没有新的套接字来之前,不能处理已经建立连接的套接字的请求 re ...

  9. Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】

    在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程——网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...

  10. IO模型浅析-阻塞、非阻塞、IO复用、信号驱动、异步IO、同步IO

    最近看到OVS用户态的代码,在接收内核态信息的时候,使用了Epoll多路复用机制,对其十分不解,于是从网上找了一些资料,学习了一下<UNIX网络变成卷1:套接字联网API>这本书对应的章节 ...

随机推荐

  1. Android Studio自定义注释模板

    一.自定义新建文件时生成的注释 setting->Editor->File and Code Templates->Includes->File Header,在这里输入自定义 ...

  2. codeforces#1152D. Neko and Aki's Prank(dp)

    题目链接: https://codeforces.com/contest/1152/problem/D 题意: 给出一个$n$,然后在匹配树上染色边,每个结点的所有相邻边只能被染色一次. 问,这颗树上 ...

  3. Namespace讨论

    我们需要讨论一个深层次的问题: 为什么不直接在 tape17162c5-00 和 tapd568ba1a-74 上配置 Gateway IP,而是引入一个 namespace,在 namespace ...

  4. Pairwise 找到你的另一半

    都说优秀的程序员擅长面向对象编程,但却经常找不到另一半,这是为什么呢?因为你总是把自己局限成为一个程序员,没有打开自己的思维. 这是一个社群的时代啊,在这里你应该找到与你有相同价值观但又互补的另一半. ...

  5. PHP开发高可用高安全App后端

    基于thinkphp5开发的APP,涵盖阿里大于,七牛云图片上传,RestfulApi,短信验证, 需要联系我:QQ:1844912514

  6. 【HTTP】http协议一些重要的知识点

    一. HTTP状态码是用以表示网页服务器HTTP响应状态的3位数字代码.所有状态码的第一个数字代表了响应的五种状态之一.当用户试图通过HTTP或FTP协议访问一台运行主机上的内容时,Web服务器返回一 ...

  7. 当PsychicBoom_发觉自己是个大SB的时候……

    这些题都是没ac调了好久发现是sb错误的题--. 想清楚再写题!!! 2019.4.18 洛谷P5155 [USACO18DEC]Balance Beam 转移方程\((a[l[i]]*(r[i]-i ...

  8. 文件上传XSS引发的安全问题

    文件上传xss,一般都是上传html文件导致存储或者反射xss 一般后缀是html,之前疏忽了,没怎么考虑文件上传xss 如果没有 验证文件内容,却验证了后缀的情况下,使用: htm后缀: 测试代码: ...

  9. Cucumber语法格式

    @login Feature: Login @T1 Scenario: Login with correct credentail Given I open login page When I ent ...

  10. 内核空间内存申请函数kmalloc kzalloc vmalloc的区别

    我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free().注意:动态申请的内存使用完后必须要释放,否则会造成内存 ...