python网络编程内容_Python网络编程
本文要写的内容也称为Python套接字编程,并简单介绍socketserver类。参考教程主要是《Python核心编程》。
首先,客户端/服务器模型,客户端向服务器发送请求,在请求合理的情况下,服务器返回客户端需要的资源,这是此架构下的通信方式。
套接字:套接字是计算机网络的数据结构,体现了通信端点的概念。在开始任何类型的通信之前,网络应用必须创建套接字。可以将套接字比作电话插口,没有它将无法进行通信。AF_INET 网络套接字 是目前使用最广泛的套接字。
套接字地址:一个网络地址由主机-端口 对来组成;可以将套接字比作电话插口,那么主机名和 端口号就像是区号与电话号码的组合。
PS:有效端口号范围为0~65535,小于1024的端口号预留给了系统。
套接字分为面向连接的套接字和无连接的套接字
面向连接的通信提供序列化的,可靠的和不重复的数据交付,而没有边界记录,这基本上意味着每条消息可以拆分成很多片段,并且每一条消息片段都确保能够达到目的地,然后将它们按顺序组合在一起,最后加将完整消息传递给正在等待的应用程序。
实现这种连接类型的主要协议是传输控制协议 TCP。创建TCP套接字,必须使用SOCK_STREAM作为套接字类型。
实例:
创建TCP服务器伪代码如下:
sock = socket() #创建套接字
sock.bind() #将套接字与地址绑定
sock.listen() #监听连接
loop: #服务器无限循环
csock = sock.accept() #接受客户端连接
loop: #通信循环
cs.recv()/cs.send() #接收发送数据
cs.close() #关闭客户端套接字
ss.close() #关闭服务器套接字
服务器示例代码如下:
客户端代码示例如下:
无连接套接字是数据报类型的套接字,这意味着,在通信开始之前不需要建立连接。所以,在数据传输过程中并无法保证它的顺序性,可靠性或重复性,而且还可能丢失信息。但它的优势也是明显的,比如开销小,“成本低廉”。实现这种无连接类型的主要协议是用户数据报协议UDP。必须使用SOCK_DGRAM作为套接字类型
创建UDP服务器的伪代码如下:
sock.socket() #创建通信套接字
sock.bind() #将套接字与地址绑定
loop: #服务器无限循环
csock = sock.recvfrom()/sock.sendto() #接收发送数据
sock.close() #关闭服务器套接字
示例代码如下:
socketserver模块简单介绍
这个模块的不同之处在于,我们使用类来编写应用程序。因为以面向对象的方式处理事物有助于组织数据,以及逻辑性地将功能放在正确的地方。应用程序是事件驱动的,这意味着只有在系统中的事件发生时,它们才会工作。
socketserver模块有4个具体的类
class socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True):使用TCP协议
class socketserver.UDPServer(server_address, RequestHandlerClass, bind_and_activate=True):使用UDP协议
class socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True):只使用在UNIX平台上
class socketserver.UnixDatagramServer(server_address, RequestHandlerClass, bind_and_activate=True):只使用在UNIX平台上
这4个类的继承关系如下:
这四个类是同步处理请求的,每一个请求必须在前一个请求完成后再开始。所以如果每个请求都花费大量的时间的话,因为需要进行大量计算,那么它们是不合适的。解决方案就是创建一个分开的进程或者线程去处理每个请求,ForkingMixIn和ThreadingMixIn混入类可以用作支持异步行为。
创建一个服务器需要以下几步,首先,必须创建一个请求处理request handler类通过继承BaseRequestHandler类并且重写handler()方法。该方法将会处理进来的请求,第二步,必须继承server类中的一个,并且将它和request handler类一起传递到服务器地址。然后调用服务器的handle_request()或者serve_forever()方法去处理一个或多个请求。最后调用server_close()关掉套接字
socketserver.BaseServer类是此模块中服务器对象的超类,本身并不直接生成实例,而是通过派生关系,让子类生产实例,它的子类,比如TCPServer,UDPServer。
请求处理对象
socketserver.BaseQequestHandler是超类,每个子类都必须定义一个新的handle()方法,它的两个子类,StreamQequestHandler和DatagramQequestHandler.
示例代码也就是python docs上的代码:
需要注意的是,此片文章中,tcp的代码调试通过了,udp和socketserver的代码调试未通过,后续再努力
python网络编程内容_Python网络编程相关推荐
- python网络编程项目_python网络编程详解
最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...
- python网络编程项目_Python网络编程攻略
第1章套接字.IPv4和简单的客户端/服务器编程 本章攻略: 打印设备名和IPv4地址 获取远程设备的IP地址 将IPv4地址转换成不同的格式 通过指定的端口和协议找到服务名 主机字节序和网络字节序之 ...
- unet网络python代码详解_python网络编程详解
最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...
- python网络编程自学_Python网络编程学习_Day11
一.协程 1.理论知识 协程,又称伪线程,是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈. ...
- python sub 不区分大小写_Python网络爬虫入门篇
1. 预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. Python入门篇:https://www.cnblo ...
- python核心编程电子书_Python核心编程 PDF 超清第3版
给大家带来的一篇关于Python编程相关的电子书资源,介绍了关于Python编程.Python核心编程方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小22.4 MB,卫斯理编写,目前豆瓣 ...
- python开发网络小工具_python 网络工具
书籍:掌握Python的网络和安全 Mastering Python for Networking and Security - 2018.pdf 简介 掌握Python的网络和安全 掌握Python ...
- python网络爬虫应用_python网络爬虫应用实战
原标题:python网络爬虫应用实战 Python这门编程语言包罗万象,可以说掌握了python,除了一些特殊环境和高度的性能要求,你可以用它做任何事. Python作为一门脚本语言,它灵活.易用.易 ...
- python交互界面实例_Python面向对象编程扑克牌发牌程序,另含大量Python代码!
1. 题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后, ...
最新文章
- oracle创建用户、授予权限及删除用户
- 为什么hive需要mysql作为数据库_Hive安装(本地独立模式,MySql为元数据库)
- PyCharm调试错误
- 4.4.5 清除变量内容
- 单用户修改root密码--centos6.2
- 祁是计算机,南京邮电大学计算机/软件学院导师介绍:祁正华
- centos7 安装mysql8_CentOS7中安装MySQL8.0.21爬坑记录
- 【lucene】入门级
- BZOJ3669[NOI2014] 魔法森林
- 单维度量表验证性因子分析_验证性因素分析介绍
- Python之温度换算
- 怎么用u盘重装系统?石大师u盘重装win10系统步骤
- 计算机网络连接显示678是什么意思,WinXP宽带连接提示错误代码678怎么办?
- Linux应用编程-音频应用编程-语音转文字项目
- Spring报错:Exception encountered during context initialization - cancelling refresh attempt: org.sprin
- DOM DOM概述
- oracle使用哈希算法,ORA_HASH函数使用的算法是什么?
- 高校车辆管理系统/车辆管理系统的设计与实现
- c++用宏定义和函数来求圆的面积,半径可为表达式
- anki 插入表格_【anki|批量制作选择题的另一种思路】- 一点资讯(Yidianzixun.com)