python之网络编程
网络编程基础知识
-
客户端/服务器架构
硬件服务器
1、文件服务器:拥有庞大通用存储容量的计算机,可以被客户端远程访问。客户端计算机会挂载服务器计算机上的磁盘,看起来就像这个磁盘是在本地计算机上一样。
网络文件系统(NFS):最流行的支持文件服务器的网络操作系统,sun公司开发的
专用外围设备:磁盘驱动器
2、打印服务器:处理客户端传入的打印作业然后发送给系统中的打印设备
专用外围设备:打印机
软件服务器
web服务器
上面安装提供给用户的web页面和web应用程序,然后启动web服务器 =》实现了一个c/s架构
数据库服务器
窗体(window)服务器
思路:服务器无限循环等待客户端的请求,客户端如果有需求就可以向服务器发送请求
网路编程就是遵循客户端/服务器架构的软件模型 -
客户端/服务器网络编程大致流程
服务器端:创建一个通信端点 ---》 无限循环监听服务器 ---》 等待客户端的请求并响应请求
客户端:创建一个通信端点 ---》与服务器建立一个连接 ---》发送请求
当请求被服务器处理,且客户端收到结果或某种确认信息,通信终止 -
套接字(socket):通信端点
1、它是什么?
计算机网络数据结构
在任何类型的通信开始之前,网络应用程序必须创建套接字
2、创建套接字
socket(socket_family, socket_type, protocol=0)
socket_family是AF_UNIX或AF_INET
socket_type是SOCK_STREAM或SOCK_DGRAM
protocol通常省略,默认为0
创建Tcp/IP套接字
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
创建UDP/IP套接字
udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
套接字对象(内置)方法
服务器套接字方法
s.bind():将地址(主机名、端口号对)绑定到套接字上
s.listen():设置并启动TCP监听器
s.accept():被动接受TCP客户端连接,一直等待直到连接到达(阻塞)
客户端套接字方法
s.connect():主动发起TCP服务器连接
s.connect_ex():connect()的扩展版本,此时会以错误码的形式返回问题,而不是抛出一个异常
普通的套接字方法
s.recv():接受TCP消息
s.recv_into():接受TCP消息到指定的缓冲区(python2.5中新增)
s.send():发送TCP消息
s.sendall():完整的发送TCP消息
s.recvfrom():接受UDP消息
s.recvfrom_info():接收UDP消息到指定的缓冲区
s.sendto():发送UDP消息
s.getpeername():连接到套接字(TCP)的远程地址
python的socket模块具体API查看官方文档:https://docs.python.org/3/library/index.html#library-index