1、Python网络编程——客户端/服务器架构编程
一、服务器:服务器就是一系列硬件和软件,为一个或多个客户端提供所须要的服务。存在的目的就是等待客户端的请求,并响应他它们,而后等待更多请求。服务器
二、客户端:客户端因特定的请求联系服务器,并发送必要的数据,而后等待服务器的回应,即最后完成请求或给出故障的缘由。网络
三、工做过程图示: 架构
四、数据传输模式并发
网络编程通常有两种数据传输模式:即两种协议 TCP 和 UDP socket
4.一、TCP方式的特色:spa
(1)校验码(2)接收方反馈(3)信息包附带序号server
4.二、UDP方式的特色:对象
(1)不创建链接:不须要花费时间创建链接和关闭链接get
(2)数据传输快:偶尔会丢失一两个消息
(3)限制一个消息包不超过 64KB 的数据
两种协议的对比:UDP 不创建链接,只保证数据的完整性,数据传输快,可是不保证数据真的被接收到,也不保证数据仅接收一次,同时也不保证数据的顺序。
2、Python网络编程模块——套接字 Socket 模块
一、建立套接字
语法格式为 sock = socket.socket(socket_family,socket_type,property=0)
其中 socket_family 指定是 socket.AF_INET 地址类型IPV4或IPV6 默认为 IPV4
socket_type 指的是 socket.SOCK_STREAM 或 socket.SOCK_DGRAM 仅可用于Unix系统通讯
property=0 该参数默认为0,一般省略不写
二、建立 TCP 套接字
t = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
三、建立 UDP 套接字
u = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
3、TCP模式——服务器 server——套接字对象的方法
一、s.bind(address):将地址(服务端IP地址、端口)绑定到套接字上
若是IP地址为 0.0.0.0 表明本机的任意一个IP 端口 0--1024 为系统保留
address 必须是元组 即address = ('192.168.1.188',888)
1.一、绑定的两种写法
① s.bind(('192.168.1.188',888))
② address = ('192.168.1.188',888)
s.bind(address)
二、s.listen(backlog) 设置并启动TCP监听,其中 backlog 表明能够同时接受多少个socket链接
三、s.accept() 被动接受TCP客户端链接,一直等待直到链接到达。
4、TCP模式——客户端 client——套接字对象的方法
一、主动发起TCP服务器链接 c.connect()
二、异常时,返回错误码 c.connect_ex()
5、TCP模式——通用(适用于:服务端/客户端)——套接字对象的方法
一、 发送数据
发送TCP消息(可能未将指定内容所有发送过去) s.send()
发送完整的TCP消息(推荐使用) s.sendall()
二、接收 TCP 数据 s.recv(bufsize)
bufsize 指定最多接收的数据量,可使用1024 2048等
若是不知道接收的数据量有多少,通常经过循环实现。
三、关闭套接字 s.close()
四、当前套接字地址 s.getsocketname()
五、设置套接字的阻塞或者非阻塞模式 s.setblocking()
六、设置阻塞套接字操做的超时时间 s.settimeout(timeout) timeout为float类型,单位为秒
七、获取阻塞套接字操做的超时时间 s.gettimeout(timeout) timeout为float类型,单位为秒
6、UDP模式
一、建立 UDP 套接字
u = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
二、接收 UDP 消息 s.recvfrom()
三、发送 UDP 消息 s.sendto()