python网络编程之TCP通信实例和socketserver框架使用例子

 更新时间:2014年04月25日 10:47:46   作者:  
这篇文章主要介绍了python网络编程之TCP通信实例和socketserver框架使用例子,需要的朋友可以参考下

1.TCP是一种面向连接的可靠地协议,在一方发送数据之前,必须在双方之间建立一个连接,建立的过程需要经过三次握手,通信完成后要拆除连接,需要经过四次握手,这是由TCP的半关闭造成的,一方在完成数据发送后要发送一个FIN来终止这个方向的连接,一个TCP连接在收到一个FIN后仍能发送数据,但应用程序很少这么做,下面是TCP连接建立和拆除的过程:



2.python可以实现TCP服务器和客户端的编程,下面是代码:

服务器端:

复制代码 代码如下:

#!/usr/bin/env python
import socket
host="localhost"
port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(5)
while 1:
 sock,addr=s.accept()
 print "got connection form ",sock.getpeername()
 data=sock.recv(1024)
 if not data:
  break
 else:
  print data

客户端:

复制代码 代码如下:

#!/usr/bin/env python
import socket
host="localhost"
port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.send("hello from client")
s.close()

3.使用socketserver框架编写TCP服务器

    Socketserver模块可以简化网络服务器的编写,它包含了四种服务器类,TCPServer使用TCP协议,UDPServer使用UDP协议,还有两个不常使用的,即UnixStreamServer和UnixDatagramServer,这两个类仅仅在unix环境下有用。

    使用服务器编程,需要进行一下步骤,先建立一个请求句柄类,这个类继承自BaseRequestHandler类,建立这个类后重写它的handle方法,然后实例化服务器类,把主机名,端口号和句柄类传给它,然后调用server_forever()方法来处理请求。

   使用socketserver框架的服务器:

复制代码 代码如下:

import SocketServer
host=''
port=10000
class Handler(SocketServer.StreamRequestHandler):

 def handler(self):
  addr=self.request.getpeername()
  print "got connection from",addr
  self.wfile.write("connected")

server=SocketServer.TCPServer((host,port),Handler)
server.serve_forever()

上面的socketserver服务器只能处理一个请求,如果要处理多个请求,可以用forking或者threading实现,实现多进程或者多线程服务器。下面是使用forking和threading的服务器代码:

使用forking的服务器:

复制代码 代码如下:

from SocketServer import TCPServer,ForkingMixIn,StreamRequestHandler
class Server(ForkingMixIn,TCPServer):pass
class Handler(StreamRequestHandler):

 def handle(self):
  addr=self.request.getpeername()
  print "got connection from",addr
  self.wfile.write('connected')

server=Server((''.10000),Handler)
server.serve_forever()

使用多线程的服务器:

复制代码 代码如下:

from SocketServer import TCPServer,ThreadingMixIn,StreamRequestHandler
class Server(ThreadingMixIn,TCPServer):pass

class Handler(StreamRequestHandler):
 def handle(self):
  addr=self.request.getpeername()
  print "got connection from",addr
  self.wfile.write("connected")

server=Server(('',10000),Handler)
server.serve_forever()

相关文章

  • python中time包实例详解

    python中time包实例详解

    在本篇文章里小编给大家整理的是一篇关于python中time包实例详解内容,对此有兴趣的朋友们可以学习下。
    2021-02-02
  • python对接ihuyi实现短信验证码发送

    python对接ihuyi实现短信验证码发送

    在本篇文章里小编给大家分享的是关于python对接ihuyi实现短信验证码发送功能,需要的朋友们可以参考下。
    2020-05-05
  • python pandas移动窗口函数rolling的用法

    python pandas移动窗口函数rolling的用法

    今天小编就为大家分享一篇python pandas移动窗口函数rolling的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python+OpenCV数字图像处理之ROI区域的提取

    Python+OpenCV数字图像处理之ROI区域的提取

    ROI区域又叫感兴趣区域。在机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。本文主要为大家介绍如何通过Python+OpenCV提取ROI区域,需要的朋友可以了解一下
    2021-12-12
  • Python PIL库图片灰化处理

    Python PIL库图片灰化处理

    这篇文章主要介绍了Python图片灰化处理PIL库的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 浅谈Python爬虫原理与数据抓取

    浅谈Python爬虫原理与数据抓取

    这篇文章主要介绍了浅谈爬虫原理与数据抓取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • python使用redis模块来跟redis实现交互

    python使用redis模块来跟redis实现交互

    这篇文章主要介绍了python使用redis模块来跟redis实现交互,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Python正则表达式非贪婪、多行匹配功能示例

    Python正则表达式非贪婪、多行匹配功能示例

    这篇文章主要介绍了Python正则表达式非贪婪、多行匹配功能,结合实例形式分析了Python正则表达式中非贪婪及多行匹配功能的实现方法与相关注意事项,需要的朋友可以参考下
    2017-08-08
  • Python3读写ini配置文件的示例

    Python3读写ini配置文件的示例

    这篇文章主要介绍了Python3读写ini配置文件的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • 浅谈在django中使用filter()(即对QuerySet操作)时踩的坑

    浅谈在django中使用filter()(即对QuerySet操作)时踩的坑

    这篇文章主要介绍了浅谈在django中使用filter()(即对QuerySet操作)时踩的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03

最新评论