第1章 Python基础 Day1 基本语法
1.1 编程语言介绍与分类
1.2 Python介绍、发展趋势
1.3 Python环境安装
1.4 开发你的第一个Python程序
1.5 选择最好用的PyCharm IDE
1.6 变量
1.7 注释
1.8 基本数据类型
1.9 读取用户指令
1.10 格式化打印
1.11 运算符
1.12 流程控制之if...else
1.13 流程控制之while循环
1.14 本章练习题&作业
第2章 Python基础 Day2 数据类型和文件操作
2.1 上章补充-变量的创建过程
2.2 上章补充-身份运算和None
2.3 细讲数据类型-列表
2.4 细讲数据类型-元组
2.5 细讲数据类型-字符串
2.6 细讲数据类型-字典
2.7 细讲数据类型-集合
2.8 秒懂二进制
2.9 字符编码之文字是如何显示的
2.10 秒懂十六进制
2.11 hash是个什么东西
2.12 用Python操作文件
2.13 本章练习题&作业
第3章 Python 基础 Day3 函数编程
3.1 上章补充-Bytes类型
3.2 上章补充-字符编码的转换
3.3 上章补充-深浅copy
3.4 函数来了
3.5 函数返回值与作用域
3.6 嵌套&匿名&高阶函数
3.7 函数的递归
3.8 内置函数
3.9 名称空间
3.10 闭包是个什么东西?
3.11 函数进阶-装饰器
3.12 列表生成式
3.13 生成器
3.14 迭代器
3.15 练习题&作业
第4章 Python基础 Day4 常用模块
4.1 模块介绍与导入
4.2 第3方开源模块的安装使用
4.3 系统调用os模块
4.4 系统调用sys模块
4.5 time & datetime模块
4.6 random随机模块
4.7 序列化pickle&json模块
4.8 hashlib 加密
4.9 文件copy模块shutil
4.10 正则表达式re模块
4.11 软件开发目录设计规范
4.12 包&跨模块代码调用
4.13 练习题&作业
第5章 Python核心编程 Day5 面向对象编程
5.1 面向对象来了
5.2 面向对象语法
5.3 对象间的交互、组合
5.4 三大特性之-继承
5.5 三大特性之-封装
5.6 三大特性之-多态
5.7 作业&练习题
第6章 Python核心编程 Day6 面向对象编程进阶
6.1 类方法、静态方法
6.2 属性方法property
6.3 神奇的反射
6.4 类的双下线方法
6.5 用type动态创建一个类
6.6 isinstance\issubclass
6.7 异常处理
6.8 作业&练习题
第7章 核心编程 Day7 Socket网络编程
7.1 C/S架构介绍
7.2 TCP/IP 各层详解
7.3 Socket介绍
7.4 Socket代码实例
7.5 粘包现象与解决方案
7.6 通过socket发送文件
7.7 本章总结
第8章 核心编程 Day8 并发编程
8.1 操作系统介绍
8.2 并发编程多进程之进程理论
8.3 并发编程多进程之开启进程的两种方式
8.4 并发编程多进程之join方法
8.5 并发编程多进程之守护进程
8.6 并发编程多进程之互斥锁
8.7 并发编程多进程之队列
8.8 并发编程多进程之生产者消费者模型
8.9 并发编程多线程之线程理论
8.10 并发编程多线程之开启线程的两种方式
8.11 并发编程多线程之多线程与多进程的区别
8.12 并发编程多线程之Thread对象的其他属性或方法
8.13 并发编程多线程之守护线程
8.14 并发编程多线程之GIL全局解释器锁
8.15 并发编程多线程之死锁现象与递归锁
8.16 并发编程多线程之信号量,Event,定时器
8.17 并发编程多线程之线程queue
8.18 并发编程多线程之进程池与线程池
8.19 并发编程之协程-协程介绍
8.20 并发编程之协程-greenlet模块
8.21 并发编程之协程-gevent模块
8.22 并发编程IO模型-IO模型介绍
8.23 并发编程IO模型-阻塞IO
8.24 并发编程IO模型-非阻塞IO
8.25 并发编程IO模型-多路复用IO
8.26 并发编程IO模型-异步IO
8.27 并发编程IO模型-IO模型比较分析
8.28 并发编程IO模型-selectors模块
8.29 本章小结
第9章 Mysql数据库开发
9.1 初识数据库-数据库管理软件的由来
9.2 初识数据库-数据库概述
9.3 初识数据库-mysql安装与基本管理
9.4 初识数据库-初识sql语句
9.5 库操作-库的增删改查
9.6 表操作-存储引擎介绍
9.7 表操作-表的增删改查
9.8 表操作-数据类型
9.9 表操作-数值类型
9.10 表操作-日期类型
9.11 表操作-字符串类型
9.12 表操作-枚举类型与集合类型
9.13 表操作-完整性约束
第7章 爬虫开发-requests模块学习
7.1 requests模块初始
7.2 requests案例实战
第21章 爬虫开发-爬虫基础简介
21.1 爬虫初识&价值探讨
21.2 爬虫合法性探究
21.3 爬虫初识深入
21.4 http&https协议
第9章 爬虫开发-数据解析
9.1 数据解析概述
9.2 数据解析---正则表达式
9.3 数据解析---bs4解析
9.4 数据解析---xpath解析
第10章 爬虫开发-验证码识别
10.1 验证码识别
10.2 验证码实战
第11章 requests模块高级操作
11.1 模拟登陆
11.2 requests模块的cookie处理
11.3 requests模块的代理IP操作
第13章 高性能异步爬虫
13.1 高性能异步爬虫---线程and线程池
13.2 高性能异步爬虫---异步协程
13.3 高性能异步爬虫---多任务异步协程
13.4 高性能异步爬虫---aiohttp
第25章 scrapy框架使用
25.1 scrapy简介
25.2 scrapy的数据持久化存储
25.3 scrapy基于Spider类的全站数据爬取
25.4 请求传参
25.5 scrapy图片数据爬取
25.6 scrapy中间件
25.7 scrapy中selenium的应用
第12章 动态渲染页面爬取
12.1 图片懒加载
12.2 selenium模块基本使用
12.3 基于selenium的爬虫案例
12.4 Pyppeteer模块使用
Python入门到精通
Java放弃之路
前端开发
Linux从小白到大神
Socket介绍
阅读量: 4134
# 本节重点: 让学生了解什么是socket 让学生掌握socket常用接口方法 本节时长需控制在35-40分钟内 ## 引子(2分钟) 我们已经知道,假设我现在要写一个程序,给另一台计算机发数据,必须通过tcp/ip协议 ,但具体的实现过程是什么呢?我应该怎么操作才能把数据封装成tcp/ip的包,又执行什么指令才能把数据发到对端机器上呢? 不能只有世界观,没有方法论呀。。。此时,socket隆重登场,简而言之,socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦、数据发送、接收等通过代码已经给你封装好了,你只需要调用几行代码,就可以给别的机器发消息了。 ## Socket介绍 ### 什么是socket?(5分钟) Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。  socket起源于Unix,而Unix/Linux 基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式 来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭) 你想给另一台计算机发消息,你知道他的IP地址,他的机器上同时运行着qq、迅雷、word、浏览器等程序,你想给他的qq发消息,那想一下,你现在只能通过ip找到他的机器,但如果让这台机器知道把消息发给qq程序呢?答案就是通过port,一个机器上可以有0-65535个端口,你的程序想从网络上收发数据,就必须绑定一个端口,这样,远程发到这个端口上的数据,就全会转给这个程序啦  ### Socket通信套路(10分钟) 当通过socket建立起2台机器的连接后,本质上socket只干2件事,一是收数据,一是发数据,没数据时就等着。 socket 建立连接的过程跟我们现实中打电话比较像,打电话必须是打电话方和接电话方共同完成的事情,我们分别看看他们是怎么建立起通话的 接电话方: ```python 1.首先你得有个电话 2.你的电话要有号码 3.你的电话必须连上电话线 4.开始在家等电话 5.电话铃响了,接起电话,听到对方的声音 ``` 打电话方: ```python 1.首先你得有个电话 2.输入你想拨打的电话 3.等待对方接听 4.say “hi 约么,我有七天酒店的打折卡噢~” 5.等待回应——》响应回应——》等待回应。。。。 ``` 把它翻译成socket通信 接电话方(socket服务器端): ```python 1.首先你得有个电话\(生成socket对象\) 2.你的电话要有号码\(绑定本机ip+port\) 3.你的电话必须连上电话线\(连网\) 4.开始在家等电话\(开始监听电话listen\) 5.电话铃响了,接起电话,听到对方的声音\(接受新连接\) ``` 打电话方(socket客户端): ```python 1.首先你得有个电话\(生成socket对象\) 2.输入你想拨打的电话\(connect 远程主机ip+port\) 3.等待对方接听 4.say “hi 约么,我有七天酒店的打折卡噢~”\(send\(\) 发消息。。。\) 5.等待回应——》响应回应——》等待回应。。。。 ```  ## Socket套接字方法 ### socket 实例类(8-10分钟) ```python socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) ``` family(socket家族) - socket.AF_UNIX:用于本机进程间通讯,为了保证程序安全,两个独立的程序(进程)间是不能互相访问彼此的内存的,但为了实现进程间的通讯,可以通过创建一个本地的socket来完成 - socket.AF_INET:(还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET) socket type类型 - socket.SOCK_STREAM #for tcp - socket.SOCK_DGRAM #for udp - socket.SOCK_RAW #原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。 - socket.SOCK_RDM #是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。 - socket.SOCK_SEQPACKET #废弃了 (Only SOCK_STREAM and SOCK_DGRAM appear to be generally useful.) proto=0 请忽略,特殊用途 fileno=None 请忽略,特殊用途 ### 服务端套接字函数(2分钟) - s.bind() 绑定(主机,端口号)到套接字 - s.listen() 开始TCP监听 - s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来 ### 客户端套接字函数(2分钟) - s.connect() 主动初始化TCP服务器连接 - s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常 ### 公共用途的套接字函数(3-5分钟) - s.recv() 接收数据 - s.send() 发送数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完,可后面通过实例解释) - s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完) - s.recvfrom() Receive data from the socket. The return value is a pair (bytes, address) - s.getpeername() 连接到当前套接字的远端的地址 - s.close() 关闭套接字 - socket.setblocking(flag) #True or False,设置socket为非阻塞模式,以后讲io异步时会用 - socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0) 返回远程主机的地址信息,例子 socket.getaddrinfo('luffycity.com',80) - socket.getfqdn() 拿到本机的主机名 - socket.gethostbyname() 通过域名解析ip地址
TCP/IP 各层详解
Socket代码实例