1、socket
济南IT培训实行"因材施教,分级培优"教学模式,实现教学的高境界
2、IO多路复用
3、socketserver
4、file模块是针对某个指定文件进行【打开】【读写】【关闭】
5、socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】
sk.close()
关闭套接字
sk.recv(bufsize[,flag])
接受套接字的数据.数据以字符串形式返回,bufsize指定最多可以接收的数量.flag提供有关消息的其他信息,通常可以忽略.
sk.recvfrom(bufsize[.flag])
与recv()类似,但返回值是(data,address).其中data是包含接收数据的字符串,address是发送数据的套接字地址.
sk.send(string[,flag])
将string中的数据发送到连接的套接字.返回值是要发送的字节数量,该数量可能小于string的字节大小.即:可能未将指定内容全部发送.
sk.sendall(string[,flag])
将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据.成功返回None,失败则抛出异常.
内部通过递归调用send,将所有内容发送出去.
sk.sendto(string[,flag],address)
将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址.返回值是发送的字节数.该函数主要用于UDP协议.
sk.settimeout(timeout)
设置套接字操作的超时期,timeout是一个浮点数,单位是秒.值为None表示没有超时期.一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如 client 连接最多等待5s )
sk.getpeername()
返回连接套接字的远程地址.返回值通常是元组(ipaddr,port).
sk.getsockname()
返回套接字自己的地址.通常是一个元组(ipaddr,port)
济南IT培训实行"因材施教,分级培优"教学模式,实现教学的高境界
sk.fileno()
套接字的文件描述符
IO多路复用
I/O(input/output),即输入/输出端口.每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信息首先什么是I/O:
I/O分为磁盘io和网络io,这里说的是网络io
IO多路复用:
I/O多路复用指:通过一种机制,可以监视多个描述符(socket),一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作.
Linux
Linux中的 select,poll,epoll 都是IO多路复用的机制.
利用select监听终端操作实例
利用select实现伪同时处理多个Socket客户端请求
利用select实现伪同时处理多个Socket客户端请求读写分离
socketserver
SocketServer内部使用 IO多路复用 以及 "多线程" 和 "多进程" ,从而实现并发处理多个客户端请求的Socket服务端.即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个"线程"或者"进程" 专门负责处理当前客户端的所有请求.
ThreadingTCPServer
ThreadingTCPServer实现的Soket服务器内部会为每个client创建一个 "线程",该线程用来和客户端进行交互.
1、ThreadingTCPServer基础
使用ThreadingTCPServer:
创建一个继承自 SocketServer.BaseRequestHandler 的类
类中必须定义一个名称为 handle 的方法
启动ThreadingTCPServer
内部调用流程为:
启动服务端程序
执行 TCPServer.__init__ 方法,创建服务端Socket对象并绑定 IP 和 端口
执行 BaseServer.__init__ 方法,将自定义的继承自SocketServer.BaseRequestHandler 的类 MyRequestHandle赋值给 self.RequestHandlerClass
执行 BaseServer.server_forever 方法,While 循环一直监听是否有客户端请求到达 ...
当客户端连接到达服务器
执行 ThreadingMixIn.process_request 方法,创建一个 "线程" 用来处理请求
执行 ThreadingMixIn.process_request_thread 方法
执行 BaseServer.finish_request 方法,执行 self.RequestHandlerClass() 即:执行 自定义 MyRequestHandler 的构造方法(自动调用基类BaseRequestHandler的构造方法,在该构造方法中又会调用 MyRequestHandler的handle方法)
济南IT培训实行"因材施教,分级培优"教学模式,实现教学的高境界