Python网络编程
一.基础概念
1.IP地址
- IP地址能够标识网络中设备的地址
- 互联网中,每个计算机都有一个独立的IP地址
- IP地址分为两类:IPv4和IPv6
- IPv4:点分十进制;目前使用的IP地址
- IPv6:冒分十六进制;将来使用的IP地址
- 查看计算机的IP地址
- Linux/macOS:使用ifconfig命令
- Windows:使用ipconfig命令
- 检查网络是否正常
- 使用ping命令
- 向目标IP地址发送四个数据包
- ping IP地址
2.端口
- 每个软件都有一个端口
- 端口是传输数据的通道,是数据传输的必经之路
3.端口号
- 每一个端口都对应一个端口号,通过端口号就能找到端口
- 一共有65536个端口号(0-65535)
- 划分为:
- 知名端口号:0-1023
- FTP上传下载:21
- SSH远程连接:22
- SMTP邮件服务:25
- HTTP网络服务:80
- 动态端口号:1024-65535;如果不设置端口号,操作系统会在动态端口号范围内随机生成一个端口号给应用程序使用,当程序退出,这个端口号会被释放
- 建议使用8000-65535范围内
- 知名端口号:0-1023
4.TCP协议
-
数据不能随便发送,需要遵守一个传输协议,保证程序之间按照指定的传输规则进行数据传输,这个传输协议就是TCP协议
-
常见的传输协议:
- TCP协议:
- UDP协议
-
TCP协议:简称传输控制协议,是一种面向对象(连接)的,可靠的,基于字节流的传输层通信协议
-
TCP通信步骤:
- 创建连接
- 传输数据
- 关闭连接
-
TCP协议的特点:
-
面向连接
-
可靠传输
-
TCP采用发送应答机制
每个发送的报文段都必须得到应答才视为发送成功
-
超时重传
发送一个报文段的时候就会启动定时器,指定时间内没收到应答就会重新发送报文段
-
错误校验
把数据,使用哈希运算,得到一个md5值,验证发送和接收的两个md5值是否相同
-
流量控制和阻塞管理
控制发送端避免发送过快
-
-
基于字节流
-
5.UDP协议
- 不可靠传输协议,速度快,但是不能保证数据传输的质量,用于视频通话等
6.socket套接字
-
socket就是进程之间网络数据通信的工具
-
socket套接字类似于插座,想使用电器就必须要使用插座
-
只要和网络相关的软件,都使用了socket套接字
二.TCP客户端开发
1.开发流程5步骤
- 创建客户端套接字对象
- 相当于开发了一个应用软件
- import socket导入套接字模块
- socket方法创建套接字对象
- socket方法有两个参数
- 采用IPv4:socket.AF_INET
- AF代表AddressFamily
- 采用TCP:socket.SOCK_STREAM
- 和服务器端套接字建立连接
- 连接方式:使用NetAssist软件模拟服务器端
- IP地址/端口号
- connect方法连接服务器端的套接字
- connect方法有一个参数
- 是一个元组类型的数据
- 元组里面写上服务器端的IP地址(以字符串点分十进制形式),写上端口号(以数字形式)
- 发送数据
- 使用send方法发送数据给服务器端
- send方法有一个参数
- 必须是字节流格式的内容,所以必须把字符串转换成字节流格式
- encode转码
- 接收数据
- 使用recv方法接收服务器端发回的数据
- recv方法有一个参数
- 1024:代表每次接收1024字节
- 接收的内容是字节流格式,所以再转换成字符串格式
- decode转码
- 接收的内容赋值给一个变量,可以print打印查看效果
- 关闭客户端套接字
- 使用close方法关闭套接字,释放资源
三.TCP服务器端开发
1.开发流程7步骤
- 创建服务器端套接字对象
- import socket导入套接字模块
- socket方法创建对象
- 同样有两个属性:IPv4模式和TCP协议
- 绑定端口号
- 8000以后
- bind方法
- 一个参数:元组数据
- 两个元素
- 一个元素是服务器的IP地址,不写的话默认本机
- 另一个是端口号
- 设置监听
- 允许最大连接客户端的数量:128个
- 多余的客户端会处于等待状态,阻塞状态
- listen