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,如需转载请自行联系原作者
目录
相关文章
|
7天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
7天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
1月前
|
数据采集 存储 XML
深入浅出:基于Python的网络数据爬虫开发指南
【2月更文挑战第23天】 在数字时代,数据已成为新的石油。企业和个人都寻求通过各种手段获取互联网上的宝贵信息。本文将深入探讨网络爬虫的构建与优化,一种自动化工具,用于从网页上抓取并提取大量数据。我们将重点介绍Python语言中的相关库和技术,以及如何高效、合法地收集网络数据。文章不仅为初学者提供入门指导,也为有经验的开发者提供进阶技巧,确保读者能够在遵守网络伦理和法规的前提下,充分利用网络数据资源。
|
2月前
|
网络协议 Python
在Python中进行UDP(User Datagram Protocol)网络编程
在Python中进行UDP(User Datagram Protocol)网络编程
30 3
|
2月前
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
44 0
|
14天前
|
数据采集 网络协议 API
python中其他网络相关的模块和库简介
【4月更文挑战第4天】Python网络编程有多个流行模块和库,如requests提供简洁的HTTP客户端API,支持多种HTTP方法和自动处理复杂功能;Scrapy是高效的网络爬虫框架,适用于数据挖掘和自动化测试;aiohttp基于asyncio的异步HTTP库,用于构建高性能Web应用;Twisted是事件驱动的网络引擎,支持多种协议和异步编程;Flask和Django分别是轻量级和全栈Web框架,方便构建不同规模的Web应用。这些工具使网络编程更简单和高效。
|
26天前
|
运维 安全 网络安全
Python灰帽子网络安全实践
旨在降低网络防范黑客的入门门槛,适合所有中小企业和传统企业。罗列常见的攻击手段和防范方法,让网站管理人员都具备基本的保护能力。Python 编程的简单实现,让网络运维变得更简单。各种黑客工具的理论和原理解剖,让人知其然更知道防范于未来。涉及互联网和局域网,让企业级网管工作更轻松。涵盖Linux&Windows 的知识点。
14 1
|
28天前
|
消息中间件 网络协议 API
Python语言的进程通讯及网络
Python语言的进程通讯及网络
|
30天前
|
机器学习/深度学习 算法框架/工具 Python
如何使用Python的Keras库构建神经网络模型?
如何使用Python的Keras库构建神经网络模型?
8 0
|
30天前
|
Python
如何使用Python的Requests库进行网络请求和抓取网页数据?
如何使用Python的Requests库进行网络请求和抓取网页数据?
12 0

热门文章

最新文章