python网络编程之socketserver

简介:

防伪码:存在的,忘却了,红尘万丈,入眸幻灭


  在进行网络编程前我们先来说说在网络中服务器与客户端是如何交互的,也就是传说中的TCP三次握手。

wKiom1iIRg3DUQ5rAAKGMa2dV9w418.png

  三次握手的目的是为了确认客户端与服务端都能接收到对方的信息,以下是三次握手的详细过程:

    第一次握手:客户端给服务端发送请求包

      此时服务端确认自己可以接收到客户端的请求包

      客户端无法确认服务端是否接收到了自己发的请求包

    第二次握手:服务端回复客户端

      此时客户端确认自己发的请求包已被服务端收到,也确认自己可以正常接收服务端发来的包

      服务端可以确认自己能接收到客户端的包,但不能确认客户端是否能收到自己发送的包

    第三次握手:客户端回复服务端

      此时客户端已无疑问

      服务端也确认刚刚客户端收到了自己的回复包。两边都没问题了,开始通信

  在python中提供了两个socket编程模块,分别是socket和socketserver。

  我们先来说说socket编程需要经历哪些步骤:

   客户端:

      1、创建socket客户端连接对象

      2、通过连接对象的connect()方法连接服务端

      3、通过连接对象的send()方法给服务端发送信息或指令

      4、通过连接对象的recv()方法接收服务端的返回信息

      5、通过连接对象的close()方法断开连接
   服务端:

      1、创建socket服务端连接对象

      2、通过连接对象的bind()方法绑定要监听的IP与端口

      3、通过连接对象的listen()方法来监听

      4、通过连接对象的accept()方法创建与客户端交互的子连接对象并等待客户端连接

      5、接收并处理客户端的请求

      6、将处理结果返回给客户端

  由于socket无法支持多用户,多并发。于是就有了socketserver

  socketserver最主要的作用就是实现并发处理。

  socketserver有以下几种类型:

  TCPServer:tcp协议

1
class  socketserver.TCPServer(server_address,RequestHandlerClass,bind_and_activate = True )

  ThreadingTCPServer:多线程,多并发的TCPServer

1
class  socketserver.ThreadingTCPServer(server_address,RequestHandlerClass,bind_and_activate = True )

  ForkingTCPServer:多进程,多并发的TCPServer #在windows中不能使用这个

1
class  socketserver.ForkingTCPServer(server_address,RequestHandlerClass,bind_and_activate = True )

  UDPServer:udp协议

1
class  socketserver.UDPServer(server_address,RequestHandlerClass,bind_and_activate = True )

  UnixStreamServer:tcp协议,Unix本机间不同进程间通信可以使用这个server

1
class  socketserver.UnixStreamServer(server_address,RequestHandlerClass,bind_and_activate = True )

  UnixDatagramServer:udp协议,Unix本机间不同进程间通信可以使用这个server

1
class  socketserver.UnixDatagramServer(server_address,RequestHandlerClass,bind_and_activate = True )  

  BaseServer是所有Server类型的基类。

  TCPServer继承了BaseServer,UnixStreamServer继承了TCPServer。

  UDPServer继承了TCPServer,UnixDatagramServer继承了UDPServer。

  BaseServer有以下这些方法:

    fileno():返回文件描述符

    handle_request():处理单个请求

    serve_forever(poll_interval=0.5):处理多个请求

      poll_interval用来设置多长时间检查一下是否有收到shutdown()请求

      当收到shutdown()请求后,调用service_actions(),serve_forever将停止提供服务

    shutdown():告诉serve_forever()让其停掉

    server_close():关闭服务


  创建socketserver的步骤:

  1、创建一个BaseRequestHandlerclass的子类并在子类中重写handle()方法

    这个子类用来处理客户端的请求

    与客户端所有的交互都是在handle()方法中编写

  2、实例化一个server(如TCPServer)类,并且将Server_IP和上一步创建的子类传给这个实例化的类(此处是       TCPServer)作为参数

  3、调用第2步实例化出来的对象的方法,这里假定这个实例化出来的对象为server:

    server.handle_request():只处理一个请求,处理完后退出

    server.serve_forever():处理多个请求,永远执行

  4、调用close()方法关闭server


  重写BaseRequestHandlerclass类的handle()方法:

1
2
3
4
5
6
7
8
def  handle( self ):
     #self.request is the TCP socket connected to the client
     self .data  =  self .request.recv( 1024 ).strip()
     print ( "{} wrote:" . format ( self .client_address[ 0 ]))
     print ( self .data)
     #just send back the same data,but upper-cased
     self .request.sendall( self .data.upper())
     #sendall其实就是重复调用send,在这里也可以用send









本文转自 忘情OK  51CTO博客,原文链接:http://blog.51cto.com/itchentao/1894707,如需转载请自行联系原作者
目录
相关文章
|
3天前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
77 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
5天前
|
数据采集 存储 JSON
Python网络爬虫教程概览
【6月更文挑战第21天】Python网络爬虫教程概览:安装requests和BeautifulSoup库抓取网页;使用HTTP GET请求获取HTML,解析标题;利用CSS选择器提取数据;处理异步内容可选Selenium;遵循爬虫策略,处理异常,尊重法律与网站规定。
15 1
|
3天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
107 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
4天前
|
机器学习/深度学习 人工智能 算法
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集 '美式足球', '棒球', '篮球', '台球', '保龄球', '板球', '足球', '高尔夫球', '曲棍球', '冰球', '橄榄球', '羽毛球', '乒乓球', '网球', '排球'等15种常见的球类图像作为数据集,然后进行训练,最终得到一个识别精度较高的模型文件。再使用Django开发Web网页端可视化界面平台,实现用户上传一张球类图片识别其名称。
95 7
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
|
1天前
|
数据采集 机器学习/深度学习 数据可视化
利用Python进行网络爬虫和数据抓取
在当今数字化时代,数据是无处不在的。从市场趋势到个人偏好,从社交媒体活动到商业智能,数据扮演着关键的角色。然而,访问、处理和利用数据并不总是轻而易举的。幸运的是,Python提供了一套强大而灵活的工具,使得网络爬虫和数据抓取成为可能。本文将深入探讨如何利用Python进行网络爬虫和数据抓取,为您打开数据世界的大门。
|
10天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
86 9
|
5天前
|
缓存 前端开发 API
了解python中几个主流的网络框架
【6月更文挑战第21天】探索Python Web几个流行框架,了解各框架特性以适应不同场景需求。
25 1
|
8天前
|
Python
【干货】Python下载网络小说
【干货】Python下载网络小说
12 2
|
9天前
|
XML 数据库 数据格式
Python网络数据抓取(9):XPath
Python网络数据抓取(9):XPath
17 0
|
12天前
|
数据采集 前端开发 Python
Python3网络开发实战读后感
Python3网络开发实战读后感