首页 > 编程语言 > 详细

python网络编程 socketserver模块

时间:2021-06-21 20:38:55      阅读:39      评论:0      收藏:0      [点我收藏+]

4、socketserver模块

  • socketserver中包含了两种类,一种为服务类(server class),一种为请求处理类(request handle class)。前者提供了许多方法:像绑定,监听,运行…… (也就是建立连接的过程)后者则专注于如何处理用户所发送的数据(也就是事务逻辑)。
  • socketserver是标准库中的一个高级模块(Python2.x中名为SocketServer)。
    • socketserver的目标是简化创建网络客户端和服务器的代码。(隐藏了实现细节)
    • socketserver是使用类来编写应用程序。
      • 以面向对象的方式处理事务有助于组织数据,以及逻辑性地将功能放在正确的地方。应用程序现在是事件驱动的,这意味着只有在系统中的事件发生时,它们才会工作。
  • socketserver模块是一个以socket为基础而创建的高级套接字通信模块,它支持客户端请求的线程和多进程处理。
  • 在原始服务器循环中,我们阻塞等待请求,当接收到请求时就对其提供服务,然后继续等待。
  • 在socketserver的服务器循环中,并非在服务器中创建代码,而是定义一个处理程序,这样当服务器接收到一个传入的请求时,服务器就可以调用你的函数。
  • socketserver模块类

技术分享图片

  • 用socketserver创建一个服务的步骤:
    • 1、创建一个request handler class(请求处理类),合理选择StreamRequestHandler和DatagramRequestHandler之中的一个作为父类(当然,使用BaseRequestHandler作为父类也可),并重写它的handle()方法。
    • 2、实例化一个server class对象,并将服务的地址和之前创建的request handler class传递给它。
    • 3、调用server class对象的handle_request() 或 serve_forever()方法来开始处理请求。
  • socketserver请求处理程序的默认行为是接受连接、获取请求,然后关闭连接。由于这个原因,我们不能在应用程序整个执行过程中都保持连接,因此每次向服务器发送消息时,都需要创建一个新的套接字。

1、python3创建TCP服务器和客户端

  • 事件包括消息的发送和接收。事实上,类定义只包括一个用来接收客户端消息的事件处理程序。所有其他的功能都来自使用的SocketServer类。
  • 最后一行代码通常是一个服务器的无限循环,它等待并响应客户端的服务请求。

1、创建SocketServer TCP服务器

###python3.8
#!/usr/bin/env python
from socketserver import (TCPServer as TCP, StreamRequestHandler as SRH)
from time import ctime

HOST = ‘‘
PORT = 21567
ADDR = (HOST, PORT)

class MyRequesHandler(SRH):
    def handle(self):
        self.data = str(self.request.recv(1024).strip(),‘utf8‘)
        print(‘...connected from:‘,self.client_address)
        print(self.data)
        self.request.sendall(bytes(‘%s %s‘ % (self.data,ctime()),‘utf8‘))

tcpServ = TCP(ADDR, MyRequesHandler)
print(‘waiting for connection...‘)
tcpServ.serve_forever()

2、创建SocketServer TCP客户端

###python3.8
# !/usr/bin/env python
from socket import *

HOST = ‘localhost‘
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

while True:
    tcpClisock = socket(AF_INET, SOCK_STREAM)
    tcpClisock.connect(ADDR)
    data = input(‘> ‘)
    if not data:
        break
    tcpClisock.send(bytes(data,‘utf8‘))
    data = tcpClisock.recv(BUFSIZ)
    if not data:
        break
    print(str(data.strip(),‘utf8‘))
    tcpClisock.close()

2、python2创建TCP服务器和客户端

1、创建SocketServer TCP服务器

###python2.7
#!/usr/bin/env python
from SocketServer import (TCPServer as TCP, StreamRequestHandler as SRH)
from time import ctime

HOST = ‘‘
PORT = 21567
ADDR = (HOST, PORT)

class MyRequesHandler(SRH):
    def handle(self):
        print ‘...connected from:‘,self.client_address
        self.wfile.write(‘[%s] %s‘ % (ctime(), self.rfile.readline()))

tcpServ = TCP(ADDR, MyRequesHandler)
print ‘waiting for connection...‘
tcpServ.serve_forever()

2、创建SocketServer TCP客户端

###python2.7
# !/usr/bin/env python
from socket import *

HOST = ‘localhost‘
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

while True:
    tcpClisock = socket(AF_INET, SOCK_STREAM)
    tcpClisock.connect(ADDR)
    data = raw_input(‘> ‘)
    if not data:
        break
    tcpClisock.send(‘%s\r\n‘ % data)
    data = tcpClisock.recv(BUFSIZ)
    if not data:
        break
    print data.strip()
    tcpClisock.close()

python网络编程 socketserver模块

原文:https://www.cnblogs.com/maiblogs/p/14914596.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!