day 36 网络编程终结内容
今日概要:
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 网络编程终结内容的更多相关文章
- 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 ...
- Day 36 网络编程-计算机的发展
手工操作 —— 穿孔卡片 批处理 —— 磁带存储和批处理系统 多道程序系统 分时系统 实时系统 通用操作系统 操作系统的进一步发展 操作系统的作用 手工操作 —— 穿孔卡片 1946年第一台计算机诞生 ...
- [转]C#网络编程(异步传输字符串) - Part.3
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part3.aspx 这篇文章我们将前进一大步,使用异步的方式 ...
- 20145208 实验五 Java网络编程
20145208 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...
- 20145325张梓靖 实验五 "JAVA的网络编程"
20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...
- 20145220 实验五 Java网络编程
20145220 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...
- javase的网络编程(InetAddress,UDP,TCP,URL,Socket,DatagramSocket)
通过一段时间对java网络编程相关内容的学习,写下这篇随笔,对这一部分的知识进行梳理和总结. 网络编程 一.网络编程三要素: IP地址:网络会给每个联网的主机分配一个数字的编码地址,该地址就是IP地址 ...
- 20145122《 Java网络编程》实验五实验报告
实验名称 Java网络编程 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 结对小伙伴 20145120黄玄曦 博客地址:http://www.cnblo ...
- 20145301实验五 Java网络编程及安全
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:30 实验名称:实验五 Java网络编程 实验内容 ...
随机推荐
- layui 左侧三级菜单栏
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- VUE (vue-cli)脚手架项目说明
1. 概述 1.1 说明 使用vue-cli快速创建的vue项目目录如下: build -- webpack相关配置以及服务启动文件,配置多依赖于下边的config文件夹中内容 config -- ...
- vue入手
https://www.jianshu.com/p/dc5057e7ad0d (最全入坑教程) http://doc.liangxinghua.com/vue-family/1.4.html(v ...
- Oracle12C_____处理数据库01033连接错误问题.sql
Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\Users\Administrator&g ...
- Confluence 6 编辑站点欢迎消息
通过编辑欢迎信息能够为你站点的主页面添加一些个人信息. 站点的欢迎信息显示在站点主面板的右侧,这是你对站点添加声明,连接,有关你项目组美好回忆照片的完美位置. 你需要 Confluence 管理员权限 ...
- Spark Streaming通过JDBC操作数据库
本文记录了学习使用Spark Streaming通过JDBC操作数据库的过程,源数据从Kafka中读取. Kafka从0.10版本提供了一种新的消费者API,和0.8不同,因此Spark Stream ...
- Rational Rose 2007下载、安装和破解
一.文件下载 (1)DAEMON Tools Lite(虚拟光驱)下载地址 链接:https://pan.baidu.com/s/19L1FT6T1MlyhkfXyobd26A 提取码:drfs (2 ...
- 第八单元 正文处理命令及tar命令
使用cat命令进行文件的纵向合并 两种文件的纵向合并方法 归档文件和归档技术 归档的目的 什么是归档 tar命令的功能 tar命令的常用选项 使用tar命令创建.查看及抽取归档文件 使用tar命令 ...
- 【ES】学习12-近似聚合
在数据操作中有三个考虑指标:大数据.精确性和实时性.三者难以同时满足. 精确 + 实时 数据可以存入单台机器的内存之中,我们可以随心所欲,使用任何想用的算法.结果会 100% 精确,响应会相对快速. ...
- 微信开发者工具_小程序js文件后面的M代表什么
Git 版本管理为了方便开发者更简单快捷地进行代码版本管理,简化一些常用的 Git 操作,以及降低代码版本管理使用的学习成本,开发者工具集成了 Git 版本管理面板.A: 增加的文件.C: 文件的一个 ...