今日概要:

1 gevent模块
协程:单线程下实现并发(并发指的是看起来同时运行,实现方式:切换+保存状态)
遇到IO切换到其他任务去执行,这种切换才能提高效率 gevent模块
1、切换+保存状态
2、检测单线程下任务的IO,实现遇到IO自动切换 2 IO模型
3 socketserver 4 subprocess 5 paramiko (了解)

这个博客地址里有今天的所有内容,

http://www.cnblogs.com/linhaifeng/articles/7454717.html

昨天作业-----协程:

这里是服务端:

from gevent import spawn,monkey;monkey.patch_all()
from socket import * def server(ip,port):
server = socket(AF_INET, SOCK_STREAM)
server.bind((ip,port))
server.listen(5) while True:
conn, addr = server.accept()
print(addr)
# ....
# t=Thread(target=talk,args=(conn,add))
# t.start()
spawn(talk,conn,addr) def talk(conn,addr):
while True:
try:
data=conn.recv(1024)
if not data:break
conn.send(data.upper())
except ConnectionResetError:
break
conn.close() if __name__ == '__main__':
server('127.0.0.1',8080) 客户端:
from socket import * client = socket(AF_INET, SOCK_STREAM)
client.connect(('127.0.0.1',8080)) while True:
client.send('hello'.encode('utf-8'))
data=client.recv(1024)
print(data.decode('utf-8'))

io模型:

io模型就是单纯的遇到阻塞就等待,原地待命,直至阻塞结束才会继续执行任务,这个等待的过程中占用cpu,占用的同时还不让其他的程序去使用CPU执行其他任务,就大大的降低了效率.

服务端:

from socket import *
server = socket(AF_INET, SOCK_STREAM)
server.bind(('127.0.0.1',8081))
server.listen(5) while True:
conn, addr = server.accept()
print(addr) while True:
try:
data=conn.recv(1024)
if not data:break
conn.send(data.upper())
except ConnectionResetError:
break
conn.close() server.close()

客户端:

from socket import *

client = socket(AF_INET, SOCK_STREAM)
client.connect(('127.0.0.1',8080)) while True:
client.send('hello'.encode('utf-8'))
data=client.recv(1024)
print(data.decode('utf-8'))

非io模型:

服务端:

# from socket import *
# import time
# server = socket(AF_INET, SOCK_STREAM)
# server.bind(('127.0.0.1',8084))
# server.listen(3)
# server.setblocking(False) # 这里是在把socket接口设置成非阻塞,
# conn_l = [] # 这是把所有的客户端都放到这个的空列表里面
# while True:
# try:
# conn, addr = server.accept()
# conn_l.append(conn) # 把得到的每一个客户端都放进这里的列表里面
# print(addr)
# except BlockingIOError: # 遇到这个异常的时候就打印下面的内容,以此来避开异常
# print('do something else', conn_l)
# del_l = [] # 这里是又另外建一个空列表,这里的空列表我们要在里面存放一些冗余的数据以及客户端,
# # 那么问题来了,什么情况下是归属到冗余的客户端以及数据呢,我们的服务端跟多个客户端连接的时候,
# # 客户端会出现很多的特殊情况,比如断电断网或者心情不好就直接断开连接,那么这个时候是会影响到其他的客户端的,
# # 我们就把他们拿出来放到这个列表里面,然后再遍历这个列表里面的内容,最终目的是要把那些死掉的客户端从最初始的列表里面删除,
# # 这样每次循环的时候就不需要再循环他们了.因为他们已经死掉了,如果不删除他们的话,会报错.
# for conn in conn_l: # 遍历这里存放客户端的列表
# try:
# data = conn.recv(1024)
# if not data:
# conn.close()
# del_l.append(conn)
# continue
# conn.send(data.upper())
# except BlockingIOError:
# pass
# except ConnectionResetError:
# conn.close()
# del_l.append(conn)
#
# for conn in del_l:
# conn_l.remove(conn)

客户端:

from socket import *

client = socket(AF_INET, SOCK_STREAM)
client.connect(('127.0.0.1',8084)) while True:
msg=input('>>: ').strip()
if not msg:continue
client.send(msg.encode('utf-8'))
data=client.recv(1024)
print(data.decode('utf-8'))

day 36 网络编程终结内容的更多相关文章

  1. 36 - 网络编程-TCP编程

    目录 1 概述 2 TCP/IP协议基础 3 TCP编程 3.1 通信流程 3.2 构建服务端 3.3 构建客户端 3.4 常用方法 3.4.1 makefile方法 3.5 socket交互 3.4 ...

  2. Day 36 网络编程-计算机的发展

    手工操作 —— 穿孔卡片 批处理 —— 磁带存储和批处理系统 多道程序系统 分时系统 实时系统 通用操作系统 操作系统的进一步发展 操作系统的作用 手工操作 —— 穿孔卡片 1946年第一台计算机诞生 ...

  3. [转]C#网络编程(异步传输字符串) - Part.3

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part3.aspx 这篇文章我们将前进一大步,使用异步的方式 ...

  4. 20145208 实验五 Java网络编程

    20145208 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  5. 20145325张梓靖 实验五 "JAVA的网络编程"

    20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...

  6. 20145220 实验五 Java网络编程

    20145220 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  7. javase的网络编程(InetAddress,UDP,TCP,URL,Socket,DatagramSocket)

    通过一段时间对java网络编程相关内容的学习,写下这篇随笔,对这一部分的知识进行梳理和总结. 网络编程 一.网络编程三要素: IP地址:网络会给每个联网的主机分配一个数字的编码地址,该地址就是IP地址 ...

  8. 20145122《 Java网络编程》实验五实验报告

    实验名称 Java网络编程 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 结对小伙伴 20145120黄玄曦 博客地址:http://www.cnblo ...

  9. 20145301实验五 Java网络编程及安全

    北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:30 实验名称:实验五 Java网络编程 实验内容 ...

随机推荐

  1. 一篇文章教你读懂UI绘制流程

    最近有好多人问我Android没信心去深造了,找不到好的工作,其实我以一个他们进行回复,发现他们主要是内心比较浮躁,要知道技术行业永远缺少的是高手.建议先阅读浅谈Android发展趋势分析,在工作中, ...

  2. VMware虚拟机安装Linux系统centos7(一)

    1.安装虚拟机(自行百度) 2.编辑虚拟机设置 光驱设置,镜像选择:(也可设置2核2G,基于自己计算机选择!) 3.点击开启此虚拟机(上下键选择安装,回车) 4.选择语言 5.设置 如果想安装图形化界 ...

  3. CSS3-字体渐变色

    示例:Mauger`s Blog <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"& ...

  4. ( linker command failed with exit code 1) 错误解决方案 项目使用的是pod

    targets -> build settings -> architectures -> build active architecture only -> debug 改成 ...

  5. automaticallyAdjustsScrollViewInsets 详解

    automaticallyAdjustsScrollViewInsets 自动缩进 20 像素 默认是 True 项目中如果有UIViewController 和ScrollView 一般都要设置成f ...

  6. Java 8 中的 Lambda 表达式

    Lambda 表达式是 Java 8 最受欢迎的功能.人们将函数式编程的概念引入了 Java 这门完全面向对象的命令式编程语言. 关于函数式编程是如何运作的,这个话题超出了本文的范围,不过我们会提炼出 ...

  7. 自定义Form组件

    一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...

  8. 【mongo】可以用localhost启动,无法用ip启动问题的解决

    问题: mongo安装在a.b.c.d机器上,启动mongo服务后, mongo localhost:27017可以进入数据库, mongo 127.0.0.1:27017也可以进入数据库 mongo ...

  9. GoogLeNet 之 Inception v1 v2 v3 v4

    论文地址 Inception V1 :Going Deeper with Convolutions Inception-v2 :Batch Normalization: Accelerating De ...

  10. 解决npm install过程中报错:unable to verify the first certificate

    今天使用npm安装开发包时遇到“unable to verify the first certificate”(无法验证第一证书)这个问题 原因:2014年2月27日,npm不再支持自签名证书.因为n ...