《python核心编程》读书笔记-socketserver模块

socketserver模块

SocketServer是标准库的一个高级模块,在Python3.x改名为socketserver,用于创建网络客户端和服务端。当使用这个模块的时候,它是以面向对象的方式处理事务,有利于组织数据,以及逻辑性的将功能放在正确的位置,你还会注意到,应用程序现在是事件驱动的,这意味着只有系统有事件发生的时,他们才会工作。
在原始服务器循环中,我们阻塞等待请求,当接收到请求时,就对其提供服务,然后继续等待,在此处的服务器循环中,并非在服务器中创建代码,而是定义一个处理程序,这样当一个服务器收到一个传入请求的时候,服务器就可以调用你的程序。

SocketServer模块类

描述
BaseServer包含核心服务器功能和mix-in类的钩子,仅用于推导,这样不会创建这个类的实例;可以用TCPServer或UDPServer创建类的实例
TCPServer/UDPServer基础的网络同步TCP/UDP服务器
UnixStreamServer/UnixDatagramServer基于文件的基础同步TCP/UDP服务器
ForkingMixIn/ThreadingMixIn核心派出或线程功能;只用作mix-in类与一个服务器类配合实现一些异步性:不能直接实例化这个类
ForkingTCPServer/ForkingUDPServerForkingMixIn和TCPServer/UDPServer的组合
ThreadingTCPServer/ThreadingUDPServerThreadingMixIn和TCPServer/UDPServer的组合
BaseRequestHandler包含处理服务请求的核心功能;仅仅用于推导,这样无法创建这个类的实例;可以使用StreamRequestHandler或DatagramRequestHandler创建类的实例
StreamRequestHandler/DatagramRequestHandler实现TCP/UDP服务器的服务处理器

TCP服务端

程序是《python核心编程》的例程,但是测试例程出了一点问题,这里做了修改贴上来记录一下。

时间戳TCP服务器,客户端发送信息,服务端接受信息打上时间戳并返回。

[root@localhost ~]# cat Tcp_SS_Ser.py 
#!/usr/bin/env python3.4

from socketserver import (TCPServer as TCP,
     StreamRequestHandler as SRH)
from time import ctime

HOST = ''
PORT = 21567
ADDR = (HOST, PORT)
 
class MyRequestHandler(SRH):
    def handle(self):
        print('...connected from:', self.client_address)
        self.wfile.write(('[%s] %s' %(ctime(), self.rfile.readline().decode())).encode())
 
tcpServ = TCP(ADDR, MyRequestHandler)
print('waiting for connection...')
tcpServ.serve_forever()

TCP客户端

[root@localhost ~]# cat Tcp_SS_Cli.py 
#!/usr/bin/env python3.4

from socket import *
 
HOST = 'localhost'
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)
 
while True:
    tcpCliSock = socket(AF_INET, SOCK_STREAM)
    tcpCliSock.connect(ADDR)
    data = input('> ')
    if not data:
        break
    tcpCliSock.send(('%s\r\n' % data).encode())
    data = tcpCliSock.recv(BUFSIZE).decode()
    if not data:
        break
    print(data.strip())
tcpCliSock.close()

期间遇到的错误

[root@localhost ~]# ./tcp_SS.py 
Traceback (most recent call last):
  File "./tcp_SS.py", line 3, in <module>
    from SocketServer import (TCPServer as TCP,
ImportError: No module named 'SocketServer'

原因:SocketServer模块是python2的名称,在python已经改成socketserver了,所以吧名称改一下就可以了

from socketserver import (TCPServer as TCP,
     StreamRequestHandler as SRH)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值